等待所有Promise,無論失敗
在您有一系列Promise 發出可能會遇到失敗的網絡請求的情況下,您可能請求的情況下,您可能請求更願意等待所有承諾完成後再繼續,即使有些失敗。
內建Promise.allSettled 方法提供了一個簡單的解決方案:
Promise.allSettled([promise]).then(([result]) => { // Reached regardless of outcome // {status: "fulfilled", value: 33} });
在引入Promise.allSettled 之前,您可以使用反射函數來實現相同的結果:
const reflect = (p) => p.then( (v) => ({ v, status: "fulfilled" }), (e) => ({ e, status: "rejected" }) ); reflect(promise).then((v) => { console.log(v.status); });
或者,擴展Reflect 函數以處理一系列Promise:
function reflect(promises) { return Promise.all(promises.map((p) => { return p.then((v) => ({ v: v, status: "fulfilled" }), (e) => ({ e: e, status: "rejected" })); })); } reflect(promises).then((results) => { var success = results.filter((x) => x.status === "fulfilled"); });
利用這些技術,您可以優雅地處理網路故障並確保您的程式碼繼續按預期執行,無論某些承諾是否成功。
以上是即使有些承諾失敗,我如何等待所有承諾都解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!