ホームページ >ウェブフロントエンド >jsチュートリアル >非同期 JavaScript の「return await Promise」と「return Promise」の違いは何ですか?

非同期 JavaScript の「return await Promise」と「return Promise」の違いは何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-28 06:20:15562ブラウズ

What's the Difference Between `return await Promise` and `return Promise` in Asynchronous JavaScript?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。