ホームページ > ウェブフロントエンド > jsチュートリアル > Promise.all() は複数の同時非同期操作をどのように処理できますか?

Promise.all() は複数の同時非同期操作をどのように処理できますか?

Susan Sarandon
リリース: 2024-12-30 05:45:15
オリジナル
647 人が閲覧しました

How Can Promise.all() Handle Multiple Concurrent Asynchronous Operations?

複数の非同期操作を同時に処理する

一連の非同期操作 (Promise として表される) が実行されるシナリオでは、次のことを決定する必要があります。これらの操作がすべて完了したら、後続のタスクに進みます。この記事では、Promise.all() メソッドを活用することで、この課題に対する解決策を提供します。

前述したように、doSomeAsyncStuff() 関数は非同期タスクを実行します。 Promise を返すように変更することで、各非同期操作の完了ステータスを取得できます。これにより、これらすべての Promise を配列に収集し、Promise.all() に渡すことができます。

Promise.all() メソッドは、Promise の配列をパラメーターとして受け入れます。配列内のすべての Promise が解決または拒否されると、Promise.all() は 1 つの Promise を返します。この 1 つの Promise は、個々の Promise からの結果 (または拒否理由) の配列に解決されます。

コードに次の手順を組み込むことで、これを実装できます。

const promises = [];

// Create a Promise for each asynchronous operation
for (let i = 0; i < 5; i++) {
  promises.push(doSomeAsyncStuff());
}

// Use Promise.all to wait for all the Promises to resolve
Promise.all(promises)
  .then(() => {
    // All asynchronous operations have completed. Execute subsequent tasks here.
    for (let i = 0; i < 5; i++) {
      doSomeStuffOnlyWhenTheAsyncStuffIsFinish();
    }
  })
  .catch((e) => {
    // Handle any errors that occurred during the asynchronous operations.
  });
ログイン後にコピー

By 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 here
    });
}

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

この例では、ランダムな遅延で解決する非同期関数 doSomethingAsync() を定義します。 Promise の配列を作成し、Promise.all() を使用して、すべての Promise が解決されるのを待ちます。すべてが正常に完了したら、後続のタスクに進むことができます。

以上がPromise.all() は複数の同時非同期操作をどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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