Promiseのexecutor関数の実行タイミングについて質問です。急遽JavaScriptでコードを書かないといけなくなったJavaScript初心者です。非同期処理でPromiseのところを勉強しているのですが、どうしても自分の認識と合わないところがあります。次のようなテストコードを作ってみたのですが、<テストコード>//① Promiseインスタンスを作成し、先行処理のためのコールバック関数を登録するconst firstPromise = new Promise( (resolve, reject) =\u0026gt; { console.log(\u0026quot;1.先行処理の開始\u0026quot;); // 長くかかる処理(2秒)をループでシミュレートする(CPUは常にビジー状態) let startMsec = new Date(); while (new Date() - startMsec \u0026lt; 2000); resolve(); console.log(\u0026quot;2.先行処理の終了\u0026quot;);});//② 後行処理のためのコールバック関数をfirstPromiseに登録するfirstPromise.then( () =\u0026gt; { console.log(\u0026quot;3.後行処理の実行(先行処理成功時)\u0026quot;);}, () =\u0026gt; { console.log(\u0026quot;3.後行処理の実行(先行処理失敗時)\u0026quot;);});//③console.log(\u0026quot;*** Main 終了 ***\u0026quot;);①Promiseインスタンスを作成し、コールバック関数を登録するだけなので瞬時に処理が終わる②もPromiseインスタンスにコールバック関数を登録するだけなので瞬時に処理が終わる③の処理が一番最初に行われる、、、という認識です①のコールバック関数はPromiseインスタンスを作成後、任意のタイミングで呼び出される(言い換えれば、いつ呼ばれるかわからない)という認識でしたが違うのでしょうか?この処理を実行すると1.先行処理の開始2.先行処理の終了*** Main 終了 ***3.後行処理の実行(先行処理成功時)となります。シングルスレッドで実行されるとはいえ、コールバック関数の処理とメインの処理はコンカレント(並列)に実行されると思うのですが、、、この結果を見ると、①のインスタンスを作成後、すぐに(同期的に?)コールバック関数が呼ばれ、終了しないと②に行かないように見えます。自分の認識のどこが間違っているのでしょうか?

JavaScript

1件の回答

回答を書く

1225637

2026-04-19 16:05

+ フォロー

①が違いますね

任意のタイミングで動かす場合はプロミスインスタンスを返す関数を作って、そいつを呼び出すんですよ

呼び出した関数に対してゼンです

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有