複数の非同期操作を同時に処理する
一連の非同期操作 (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 サイトの他の関連記事を参照してください。