複数の Promise を非同期で操作する
この記事は、ループ内で複数の非同期タスクを実行する際の課題と、それらのタスクの完了を保証する必要性に対処することを目的としています。後続のタスクに進む前に。
ループが一連のタスクを反復し、各タスクが非同期で実行されるシナリオを想像してください。ループに続いて、別のループは最初のループのタスクの完了に依存します。この調整を効率的に行うにはどうすればよいでしょうか?
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 番目のループのタスクに進みます。
次の例は、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 サイトの他の関連記事を参照してください。