ホームページ >ウェブフロントエンド >jsチュートリアル >非同期 JavaScript の「return await Promise」と「return Promise」の違いは何ですか?
return await Promise と return Promise の違いを理解する
非同期 JavaScript では、return await Promise と return Promise の動作が次のようになります。議論の対象。どちらの式も Promise を返す必要がありますが、特定のシナリオでは微妙な違いが生じる可能性があります。
非同期関数
提供されたコード サンプルでは、2 つの非同期関数 (lay1Second) が定義されています。最初の関数は return await を使用して遅延 Promise の結果を別の Promise でラップしますが、2 番目の関数は単に遅延 Promise を待機せずに返します。
Observable Behavior
ほとんどの場合、これら 2 つの構造間には識別可能な違いはありません。どちらの late1Second 関数も、1 秒後に解決される Promise を返します。ただし、質問で述べたように、return await バージョンは、中間 Promise オブジェクトの作成により、若干多くのメモリを消費する可能性があります。
例外処理
ただし、これらの式が try-catch ブロック内で使用される場合、重要な違いが現れます。次の例を考えてみましょう。
async function rejectionWithReturnAwait() { try { return await Promise.reject(new Error()); } catch (e) { return 'Saved!'; } } async function rejectionWithReturn() { try { return Promise.reject(new Error()); } catch (e) { return 'Saved!'; } }
最初の関数 (rejectionWithReturnAwait) では、戻り値が await でラップされています。これは、関数が拒否された Promise が拒否されるまで待機することを意味します。これにより、非同期ブロック内で例外がスローされます。その結果、catch ハンドラーに到達し、関数は「Saved!」に解決される Promise を返します。
逆に、2 番目の関数 (rejectionWithReturn) では、Promise は非同期内で待機せずに直接返されます。関数。これは、非同期ブロック内で例外が発生せず、catch ハンドラーが実行されないことを意味します。代わりに、呼び出し元は拒否された Promise を受信するだけです。
以上が非同期 JavaScript の「return await Promise」と「return Promise」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。