コンポーネント内の 2 つのライフ サイクル関数には非同期操作があります。実行順序は宣言サイクルの順序 (最初に 1、次に 2) に厳密に従っています。実行順序が次の順序に基づいているかどうかはまだ不明です。メッセージキューに挿入されたオーダー。この問題は、componentWillMount の非同期結果が非常に長い時間を返し、componentDidMount の非同期結果が非常に短い時間を返すと仮定していると理解できますが、まず、componentDidMount でコールバック結果を実行し、次に、componentDidMount でコールバック結果を実行することは可能ですか?コンポーネントウィルマウント
単純化した質問は次のとおりです。2 つの非同期アクション A と B のトリガー順序がわかっていると仮定すると、A と B での同じ遅延の順序は保証できますか?
答えは明らかにノーです。たとえば、A と B の間にマイクロ秒の遅延しかない場合、大きな遅延を持つ 2 つのsetTimeout
が
setTimeout
就不能保证按照调用setTimeout
が呼び出される順序でトリガーされることは保証できません。コードの実行順序を保証するために、この脆弱なタイミング関係に依存することはできません。コードレビューで、この関係を使用してデータの初期化や非同期リクエストなどの機能を実装するコードに遭遇した場合、回答者は間違いなく意見を言うでしょう。非同期制御フローの場合、Promise / yield などのメソッドを使用して実行順序を保証できますが、ここでは説明しません。