ホームページ >ウェブフロントエンド >jsチュートリアル >Promise.all は Await の同時実行とエラー処理をどのように改善できるでしょうか?

Promise.all は Await の同時実行とエラー処理をどのように改善できるでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 16:15:11741ブラウズ

How Can Promise.all Improve Concurrent Await Execution and Error Handling?

同時待機実行: 逐次実行の克服

問題:

従来の非同期プログラミングでは、複数の待機操作の同時実行シーケンシャルのため妨げられています処理中です。

原因:

問題のコードは、最初の待機操作が完了するまで待機してから、2 番目の待機操作を開始します。

提案された解決策:

Promise を個別に待つ前に取得するという最初の提案では、並列処理が可能です実行。ただし、エラー処理と潜在的な未処理の拒否エラーに関する問題が発生します。

推奨アプローチ:

提案されたソリューションの代わりに、Promise.all:

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

の利点Promise.all:

    提供されたすべての Promise の並列実行を開始します。
  • 拒否を適切に処理し、未処理の拒否エラーを回避します。
  • より簡潔で、提案されたものと比較した一貫した構文

例:

タイミングとエラー処理の違いを示す次の例を考えてみましょう。

const getValue1Async = () => {
  return new Promise(resolve => {
    setTimeout(resolve, 500, "value1");
  });
};

const getValue2Async = () => {
  return new Promise((resolve, reject) => {
    setTimeout(reject, 100, "error");
  });
};

// Sequential execution with proposed solution
(async () => {
  try {
    console.time("sequential");
    const p1 = getValue1Async();
    const p2 = getValue2Async();
    const value1 = await p1;
    const value2 = await p2;
  } catch (e) {
    console.error(e);
  }
  console.timeEnd("sequential");
})();

// Concurrent execution with Promise.all
setTimeout(async () => {
  try {
    console.time("concurrent");
    const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
  } catch (e) {
    console.timeEnd("concurrent", e);
  }
}, 1000);
順次実行の例では、コードは最初の操作が完了するまで 500 ミリ秒待ってから、2 番目の操作を開始します。対照的に、同時実行の例では、100ms 直後の 2 番目の操作の失敗を処理します。

以上がPromise.all は Await の同時実行とエラー処理をどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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