ホームページ >ウェブフロントエンド >jsチュートリアル >Promise コンストラクターのエグゼキューター関数は同期ですか、それとも非同期ですか?

Promise コンストラクターのエグゼキューター関数は同期ですか、それとも非同期ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 12:06:26506ブラウズ

 Is the Promise Constructor’s Executor Function Synchronous or Asynchronous?

Promise コンストラクター コールバックの非同期実行

Promise コンストラクターは、Promise の履行ロジックを定義するエグゼキューター関数を受け入れます。 1 つの重要な質問が生じます: このエグゼキューター関数は非同期で実行されますか? それとも同期で実行されますか?

詳細な回答

動作は Promise 自体の実装によって異なります。ただし、Promise の ES6 標準では、Promise の履行は常に 非同期であると明示的に規定されています。

仕様を参照すると、executor 関数 (この場合は y 関数) ) は実際に同期的に実行されます (仕様のステップ 10 を参照)。ただし、promise.then(...) など、promise での .then() への後続の呼び出しは、常に非同期で実行されます (「PerformPromiseThen」アルゴリズムのステップ 8 を参照)。

影響

.then() 呼び出しのこの非同期の性質には、いくつかの影響があります。

  • エグゼキューター関数が変数を変更するか副作用を実行する場合、それらの変更は .then( ) handler.
  • .then() ハンドラーを使用して、現在のイベント ループの終了後に実行する必要があるタスクをスケジュールすることができます。
  • この非同期動作により、promise を使用して複数の非同期をチェーンできることが保証されます。

コード例

次のコード スニペットを考えてみましょう。

<code class="javascript">function y(resolve, reject) {
  console.log("Result");
  resolve();
}

var promise = new Promise(y);
promise.then(() => {
  console.log("Then handler executed after the synchronous execution of y");
});</code>

この例では、 y 関数が同期的に実行されます。ただし、イベント ループが終了すると、.then() ハンドラーは非同期で実行されます。このコードの出力は次のようになります:

Result
Then handler executed after the synchronous execution of y

以上がPromise コンストラクターのエグゼキューター関数は同期ですか、それとも非同期ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。