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