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

Linda Hamilton
リリース: 2024-10-30 17:26:26
オリジナル
693 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!