ホームページ  >  記事  >  ウェブフロントエンド  >  Promise コンストラクターのコールバックは同期的に実行されますか? それとも非同期的に実行されますか?

Promise コンストラクターのコールバックは同期的に実行されますか? それとも非同期的に実行されますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 17:26:26691ブラウズ

Is the Promise Constructor Callback Executed Synchronously or Asynchronously?

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 つのステップで構築する必要があります:

  1. エグゼキュータ関数は 3 つの引数を指定して呼び出す必要があります:

    • resolve(): エグゼキュータが呼び出すことができる関数
    • reject(): プロミスを拒否するために実行者が呼び出すことができる関数。
    • this: 将来の使用のために予約されています。
  2. エグゼキュータ関数は同期的に返される必要があります。

ただし、その後の 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 サイトの他の関連記事を参照してください。

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