並行執行非同步函數
在ES7/ES2016 中,await 表達式的順序執行是預設行為,類似於使用.然後( )。然而,要並行執行非同步調用,還有其他方法。
使用 Promise.all() 並行執行
一個優雅的解決方案是使用 Promise.all( )。此方法接受一組承諾並傳回一個解析為結果陣列的承諾:
await Promise.all([someCall(), anotherCall()]);
要儲存單一結果,您可以將傳回值解構為變數:
let [someResult, anotherResult] = await Promise.all([someCall(), anotherCall()]);
警告:使用catch() 處理拒絕
請注意Promise.all()實現“快速失敗”語義。這意味著如果任何一個輸入 Promise 被拒絕,則整個操作將被拒絕,並出現失敗 Promise 的錯誤。若要擷取並處理潛在的錯誤,請使用 .catch() 方法。
例如:
Promise.all([happy('happy', 100), sad('sad', 50)]) .then(console.log).catch(console.log); // Logs 'sad'
以上是如何在 JavaScript 中並行執行非同步函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!