ホームページ >ウェブフロントエンド >jsチュートリアル >Promise.all はどのようにして同時非同期操作の処理を改善し、未処理の拒否を回避できるのでしょうか?

Promise.all はどのようにして同時非同期操作の処理を改善し、未処理の拒否を回避できるのでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-23 17:03:32729ブラウズ

How Can Promise.all Improve Concurrent Async Operation Handling and Avoid Unhandled Rejections?

同時非同期操作の待機

Promise.all による並列実行

複数の非同期操作を同時にトリガーするには、Promise を取得するパターンの使用を避けてください。そして順番に待ちます。代わりに、Promise.all 関数を利用します。

const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);

このアプローチでは、両方の非同期操作を同時に開始し、結果を配列で提供します。

拒否された Promises の処理

提供されるソリューションは操作を並行して実行しますが、最初の操作が完了するのを待ってから 2 番目の操作を待ちます。これにより並列実行が可能になりますが、拒否された Promise の処理に問題が発生します。

最初の Promise の完了に時間がかかり、2 番目の Promise が失敗した場合、Promise.all は即座に失敗し、最初の Promise が拒否されなくなります。これにより、処理できない拒否エラーが発生する可能性があります。

並列待機の構文

現在、並列待機に指定された await 構文はないため、Promise.all を使用する代替手段があります。 await.all に関する議論が浮上しており、将来の機能拡張の可能性が示されています。

アプローチの比較

次の例を考えてみましょう。ここで、getValue1Async は解決するのに 500 ミリ秒かかり、getValue2Async は拒否するのに 100 ミリ秒かかります。

順次実行:

async () => {
  try {
    const value1 = await getValue1Async();
    const value2 = await getValue2Async();
  } catch (e) {
    console.error(e);
  }
};

との同時実行Promise.all:

async () => {
  try {
    const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
  } catch (e) {
    console.timeEnd("Promise.all", e);
  }
};

Output:

  • Sequential: コンソール出力には、エラーは
  • 同時実行: コンソール出力には 100 ミリ秒後にエラー ログが表示されます。

結論:

Promise の使用.all は、非同期操作の並列実行を効果的に有効にし、拒否された操作の適切な処理を保証します。約束します。

以上がPromise.all はどのようにして同時非同期操作の処理を改善し、未処理の拒否を回避できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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