使用混合解決方案處理 Promise
在非同步程式設計中,處理 Promise 集可能會帶來挑戰。考慮這樣一個場景,您有多個網路請求,其中一個可能會失敗。預設情況下,一旦一個 Promise 被拒絕,Promise.all() 就會停止進程並出現錯誤。如果您想捕獲所有請求的回應,這可能並不理想。
沒有 Promise 庫的模式
一種不使用 Promise 庫的解決方案涉及將每個 Promise 包裝為「反映」功能。此函數傳回新的 Promise,該 Promise 使用原始 Promise 中的值或錯誤進行解析,並包含指示成功或拒絕的「狀態」屬性。
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" }));
然後,您可以將每個Promise 映射到Reflect Promise 並調用映射數組上的Promise.all():
var arr = [fetch('index.html'), fetch('http://does-not-exist')] Promise.all(arr.map(reflect)).then(function (results) { var success = results.filter(x => x.status === "fulfilled"); });
這種方法允許您處理成功和被拒絕的Promise
內置Promise.allSettled()
請注意,現代瀏覽器和 JavaScript 環境現在有一個提供類似功能的原生 Promise.allSettled() 方法。它傳回一個用一系列結果解析的承諾,每個結果代表對應原始承諾的狀態和值(如果已實現)。
以上是如何在 JavaScript 中處理多個 Promise,包括被拒絕的 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!