使用await並行化非同步呼叫
使用ES7中引入的async/await語法時,必須了解將執行多個await語句順序而不是並行。這意味著在一個函數呼叫中等待結果將暫停執行,直到前一個呼叫完成。為了避免這種情況,有幾種選擇。
Node.js 中最簡單的方法之一是利用 Promise.all() 函數。 Promise.all() 允許您建立單一的 Promise,當所有提供的 Promise 都解析時,該 Promise 會解析;當其中任何一個 Promise 拒絕時,該 Promise 會被拒絕。透過將一組 Promise 傳遞給 Promise.all(),您可以確保它們全部同時運作。
這是一個範例:
const someCall = () => new Promise((resolve) => setTimeout(() => resolve("some value"), 100)); const anotherCall = () => new Promise((resolve) => setTimeout(() => resolve("another value"), 200)); await Promise.all([someCall(), anotherCall()]) .then((results) => { const [someResult, anotherResult] = results; // Do something with the results. });
在這個範例中, someCall() anotherCall() 會並行執行,結果將在 results 陣列中提供。
另一種方法是使用 async 函式庫,它為非同步操作提供附加功能。 async.parallel() 函數可讓您指定要並行運行的函數數組,以及在所有函數完成後調用的回調。
這是使用 async.parallel() 的範例:
const async = require("async"); const someCall = (callback) => setTimeout(() => callback(null, "some value"), 100); const anotherCall = (callback) => setTimeout(() => callback(null, "another value"), 200); async.parallel([someCall, anotherCall], (err, results) => { if (err) { // Handle any errors. } else { const [someResult, anotherResult] = results; // Do something with the results. } });
Promise.all() 和 async.parallel() 都提供了並行執行非同步函數的可靠方法。選擇最適合您的專案要求和偏好的方法。
以上是如何使用'async/await”在 JavaScript 中並行化非同步呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!