1. ホーム
  2. javascript

[解決済み] なぜjavascriptのES6 Promisesはresolve後も実行を継続するのですか?

2022-07-27 21:08:28

質問

プロミスはresolve()やreject()ができるものだと理解していますが、resolveやrejectが呼ばれた後もプロミス内のコードが実行され続けると知って驚いています。

resolveやrejectはexitやreturnの非同期版で、直後の関数の実行をすべて停止させるものだと考えていました。

以下の例で、resolveの呼び出し後にconsole.logが表示されることがあるのはなぜか、その背後にある考えを説明できる人はいますか?

var call = function() {
    return new Promise(function(resolve, reject) {
        resolve();
        console.log("Doing more stuff, should not be visible after a resolve!");
    });
};

call().then(function() {
    console.log("resolved");
});

jsbin

どのように解決するのですか?

JavaScriptには "完了まで実行" . エラーが発生しない限り、関数は return ステートメントかその終了に達するまで実行されます。関数の外側の他のコードはそれを邪魔することはできません(繰り返しますが、エラーがスローされない限り)。

もしあなたが resolve() でイニシャライザー関数を終了させたい場合は、その前に return :

return new Promise(function(resolve, reject) {
    return resolve();
    console.log("Not doing more stuff after a return statement");
});