要同時觸發多個非同步操作,請避免使用取得Promise 的模式然後依次等待他們。相反,利用 Promise.all 函數:
const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
此方法同時啟動兩個非同步操作並在陣列中提供結果。
提供的解決方案並行運行這些操作,但先等待第一個操作完成,然後再等待第二個操作。雖然這允許並行執行,但它在處理被拒絕的 Promise 時引入了問題。
如果第一個 Promise 需要更長的時間才能完成,而第二個 Promise 失敗,Promise.all 將立即失敗,從而防止第一個 Promise 被拒絕。這可能會導致未處理的拒絕錯誤。
目前,沒有指定的並行等待語法,因此可以使用 Promise.all。關於await.all的討論已經出現,顯示未來增強的可能性。
考慮以下範例,其中getValue1Async 需要500 毫秒才能解析,getValue2Async 需要100 毫秒才能拒絕:
順序執行:
async () => { try { const value1 = await getValue1Async(); const value2 = await getValue2Async(); } catch (e) { console.error(e); } };
與Promise.all 並發執行:
async () => { try { const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]); } catch (e) { console.timeEnd("Promise.all", e); } };
輸出:
結論:
使用 Promise.all 可以有效地實現非同步操作的並行執行和確保正確處理被拒絕的承諾。以上是Promise.all 如何改善並發非同步操作處理並避免未處理的拒絕?的詳細內容。更多資訊請關注PHP中文網其他相關文章!