promiseはresolve()またはreject()を実行できるものであることを理解しているので、resolveまたはrejectが呼び出された後も、promiseのコードが実行され続けることに驚いた。
すべての即時の関数実行を停止する、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");
});
これは良い質問です。すべての回答を読んでも、ベストプラクティスについては
—
ガブリエルグレン
誤解は、resolve()で終了していることに起因すると思います:resolve()を呼び出した直後に約束は解決されますが、これは他の人がすでに言ったように、約束を終了させた関数が義務も、それが「正常な」終了に達するまで続く。
—
ジュゼッペベルトーネ
resolve()
魔法のようにの効果を持つJS制御ステートメントではありませんreturn
。これは単なる関数呼び出しであり、はい、実行はその後も続行されます。