ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で「return Promise」ではなく「Return await Promise」を使用する必要があるのはどのような場合ですか?

JavaScript で「return Promise」ではなく「Return await Promise」を使用する必要があるのはどのような場合ですか?

Susan Sarandon
リリース: 2024-11-17 22:58:02
オリジナル
394 人が閲覧しました

 When should I use `return await promise` over `return promise` in JavaScript?

Return await Promise と Return Promise

JavaScript では、非同期関数の return await Promise と return Promise の違いは多くの場合微妙です。ただし、以下で説明するように、異なる動作を示す特定のシナリオがあります。

遅延と可観測性:

提供されたコード例では、両方のアプローチを使用した late1Second 関数は戻り値を返します。 1 秒の遅延後に解決される約束。観察可能な結果という点では、どちらのバージョンも同様に動作するように見えます。

エラー処理:

通常、どちらのアプローチも、非同期関数内のエラー処理や関数の伝播には影響しません。呼び出し側にエラーが発生します。どちらの場合も、関数の Promise からエラーが発生します。

メモリ消費量:

直接観察することはできませんが、return await Promise バージョンでは、以前と比べてメモリ消費量がわずかに増加する可能性があります。返却約束アプローチへ。これは、追加の Promise オブジェクトが作成され、実行中に待機される可能性があるためです。

Try-Catch ブロック:

try 内でこれらのアプローチを使用する場合、微妙だが重要な違いが生じます。 -ブロックをキャッチします。次の例を考えてみましょう。

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 では、待機された拒否により例外がスローされ、catch ブロックでキャッチされます。その結果、関数は「Saved!」に解決されます。

逆に、rejectionWithReturn では、非同期関数内で待たずに直接拒否が返されます。これは、catch ブロックが実行されず、代わりに呼び出し元が拒否を受け取ることを意味します。

結論:

return await Promise と return Promise の違いは、通常は無視できます。 、try-catch ブロックを使用する場合は、潜在的な影響を認識することが重要です。ほとんどの場合、どちらのアプローチも最小限の影響で使用できます。ただし、try-catch ブロック内で正確なエラー処理を行うには、非同期関数内で拒否をキャッチして正しく処理できるように、return await Promise を優先する必要があります。

以上がJavaScript で「return Promise」ではなく「Return await Promise」を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート