問題:
在傳統非同步程式設計中,多個a wait操作並發執行因順序受阻
原因:
相關程式碼等待第一個等待操作完成,然後再啟動第二個。
建議的解決方案:
在單獨等待 Promise 之前獲取 Promise 的最初建議確實允許並行執行。但是,它引入了錯誤處理和潛在的未處理拒絕錯誤的問題。
建議方法:
我們建議使用Promise.all,而不是建議的解決方案:
const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
的好處:Promise .all:
示例:
考慮以下示例,該示例演示了計時和錯誤處理方面的差異:
const getValue1Async = () => { return new Promise(resolve => { setTimeout(resolve, 500, "value1"); }); }; const getValue2Async = () => { return new Promise((resolve, reject) => { setTimeout(reject, 100, "error"); }); }; // Sequential execution with proposed solution (async () => { try { console.time("sequential"); const p1 = getValue1Async(); const p2 = getValue2Async(); const value1 = await p1; const value2 = await p2; } catch (e) { console.error(e); } console.timeEnd("sequential"); })(); // Concurrent execution with Promise.all setTimeout(async () => { try { console.time("concurrent"); const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]); } catch (e) { console.timeEnd("concurrent", e); } }, 1000);
在順序執行範例中,程式碼等待500毫秒以完成第一個操作,然後啟動第二個操作。相比之下,並發執行範例在 100ms 後立即處理第二個操作的失敗。
以上是Promise.all 如何改善並發等待執行和錯誤處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!