使用 Promise 等待處理網路故障
在 JavaScript 中,Promise.all() 是管理多個非同步操作的強大工具。然而,當你希望所有的 Promise 都完成,即使有些被拒絕時,它可能不適合。
要處理這種情況,你可以實作一個自訂的「Promise Reflect」函數,將Promise 轉換為已完成或已拒絕的物件status:
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" }));
使用這個反射函數,你可以將原始的Promise 數組映射到反射數組promies:
var arr = [ fetch('index.html'), fetch('http://does-not-exist') ] var reflectedPromises = arr.map(reflect);
最後,您可以使用Promise.all() 等待所有反射的 Promise 完成:
Promise.all(reflectedPromises).then(results => { var success = results.filter(x => x.status === "fulfilled"); });
這種方法允許您優雅地處理網路故障並繼續僅在所有請求完成後。您可以分別從 success 和 results 陣列中存取已解析的值和錯誤。
或者,您現在可以使用本機 Promise.allSettled() 方法:
Promise.allSettled([promise]).then(([result]) => { console.log(result); // Handles both fulfilled and rejected promises });
以上是在 JavaScript 中使用 Promise 時如何優雅地處理網路故障?的詳細內容。更多資訊請關注PHP中文網其他相關文章!