Promise コンストラクター コールバックの非同期実行
質問:
次のコード スニペット:
<code class="python">function y(resolve, reject) { console.log("Result"); resolve(); } var promise = new Promise(y);</code>
y 関数は非同期で実行されますか?
答え:
Promise コンストラクター コールバックの実行は、特定の実装によって異なります。
ES6 仕様のセクション 25.4.3.1 では、次のように述べられています。
「executor が例外をスローしない場合、Promise オブジェクトは2 つのステップで構築する必要があります:
エグゼキュータ関数は 3 つの引数を指定して呼び出す必要があります:
ただし、その後の Promise での .then() 呼び出しの実行は常に非同期です。これは、ES6 仕様のセクション 25.4.5.3.1 で明らかであり、「PerformPromiseThen」アルゴリズムについて説明しています。
「Promise の [[PromiseState]] 内部スロットの値が "fulfilled" の場合、... "
"...Perform EnqueueJob("PromiseJobs", PromiseReactionJob, «fulfillReaction, value»)."
同様に、Promise が拒否された場合、アルゴリズムは非同期ジョブのエンキューを実行します。
結論:
したがって、Promise コンストラクターに渡される関数は同期的に実行されますが、後続の .then() 呼び出しは ES6 仕様に従って常に非同期的に実行されます。
以上がPromise コンストラクターのコールバックは同期的に実行されますか? それとも非同期的に実行されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。