ホームページ > ウェブフロントエンド > jsチュートリアル > Promise.all() は、後続の操作に進む前に複数の非同期タスクを効率的に処理するにはどうすればよいでしょうか?

Promise.all() は、後続の操作に進む前に複数の非同期タスクを効率的に処理するにはどうすればよいでしょうか?

Patricia Arquette
リリース: 2024-12-15 19:19:15
オリジナル
840 人が閲覧しました

How Can Promise.all() Efficiently Handle Multiple Asynchronous Tasks Before Proceeding to Subsequent Operations?

複数の Promise を非同期で操作する

この記事は、ループ内で複数の非同期タスクを実行する際の課題と、それらのタスクの完了を保証する必要性に対処することを目的としています。後続のタスクに進む前に。

問題: 非同期の処理ループ内のタスク

ループが一連のタスクを反復し、各タスクが非同期で実行されるシナリオを想像してください。ループに続いて、別のループは最初のループのタスクの完了に依存します。この調整を効率的に行うにはどうすればよいでしょうか?

Promise と Promise.all()

Promise は、この問題に対する洗練された解決策を提供します。 doSomeAsyncStuff() から Promise を返すことで、非同期操作を管理できます。

Promise.all() は、Promise の配列を受け取り、単一の Promise を返す強力なメソッドです。この 1 つの Promise は、すべての入力 Promise が解決されるか、いずれかが拒否された場合にのみ解決されます。

実装

目的を達成するには、次のように Promise.all() を活用できます。

const promises = [];

for (let i = 0; i < 5; i++) {
  promises.push(doSomeAsyncStuff());
}

Promise.all(promises)
  .then(() => {
    // Execute tasks that require all async tasks to finish
  })
  .catch((e) => {
    // Handle errors
  });
ログイン後にコピー

この実装では、すべての Promise を配列に収集し、Promise.all() に渡します。解決 (または拒否) したら、2 番目のループのタスクに進みます。

その他の考慮事項

  • さらに明確にするために、var の代わりに const または let を使用します。
  • catch メソッドを使用してエラーを処理することを検討してください。
  • さらに理解するには、Promise に関する MDN のドキュメントを参照してください。

次の例は、Promise.all() を使用して複数のメッセージを待機する方法を示しています。完了する非同期タスク:

function doSomethingAsync(value) {
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log("Resolving " + value);
      resolve(value);
    }, Math.floor(Math.random() * 1000));
  });
}

function test() {
  const promises = [];

  for (let i = 0; i < 5; i++) {
    promises.push(doSomethingAsync(i));
  }

  Promise.all(promises)
    .then((results) => {
      console.log("All done", results);
    })
    .catch((e) => {
      // Handle errors
    });
}

test();
ログイン後にコピー

以上がPromise.all() は、後続の操作に進む前に複数の非同期タスクを効率的に処理するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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