首頁 > web前端 > js教程 > 如何在 JavaScript 中處理多個 Promise,包括被拒絕的 Promise?

如何在 JavaScript 中處理多個 Promise,包括被拒絕的 Promise?

Susan Sarandon
發布: 2024-12-18 06:07:14
原創
887 人瀏覽過

How Can I Handle Multiple Promises, Including Rejected Ones, in JavaScript?

使用混合解決方案處理 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板