同時處理多個非同步操作
在執行一系列非同步操作(表示為Promise)的場景中,有必要確定當所有這些操作完成後,才繼續進行後續任務。本文透過利用 Promise.all() 方法提供了一個解決方案。
如您所提到的,doSomeAsyncStuff() 函數執行非同步任務。透過修改它傳回一個Promise,我們可以捕捉每個非同步操作的完成狀態。這允許我們將所有這些 Promise 收集到一個陣列中,然後將其傳遞給 Promise.all()。
Promise.all() 方法接受 Promise 陣列作為其參數。一旦數組中的所有 Promise 都已解決或拒絕,Promise.all() 將傳回一個 Promise。這個單一 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. });
透過利用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中文網其他相關文章!