首頁 >web前端 >js教程 >如何在 JavaScript 中處理所有 Promise,甚至是那些失敗的 Promise?

如何在 JavaScript 中處理所有 Promise,甚至是那些失敗的 Promise?

Patricia Arquette
Patricia Arquette原創
2024-12-27 14:30:10216瀏覽

How Can I Process All Promises, Even Those That Fail, in JavaScript?

無論失敗如何處理Promise

在處理一組涉及網路請求的Promise 時,通常需要處理某些請求的場景可能會處理某些請求的場景可能會失敗。預設情況下,Promise.all() 在遇到第一次拒絕時提前終止。但是,在某些情況下,您可能希望等到所有 Promise 完成,即使是那些失敗的 Promise。

建議模式

一種方法是使用Reflect() 函數,它將Promise 轉換為Promise,該Promise 解析為具有已完成或已拒絕屬性的狀態對象。透過將陣列中的 Promise 對應到 Reflect() 函數,您可以確保所有 Promise 完成,無論其狀態為何。

const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" }));

Promise.all(arr.map(reflect)).then(results => {
  const success = results.filter(x => x.status === "fulfilled");
});

在此範例中,Promise.all() 與修改後的一系列 Promise,等待所有 Promise 完成。 success 陣列將包含成功 Promise 的結果,使您能夠優雅地處理網路故障,並仍根據可用資料繼續執行操作。

改進的解決方案(Promise.allSettled)

內置於現代JavaScript 中的是Promise.allSettled,它提供了一種更簡潔、更有效的方法來實現所需的行為。它會傳回解析為結果陣列的 Promise,每個結果都包含已完成或拒絕的狀態,無論 Promise 的結果為何。

Promise.allSettled([promise]).then(([result]) => {
  // reach here regardless
  // { status: "fulfilled", value: 33 }
});

以上是如何在 JavaScript 中處理所有 Promise,甚至是那些失敗的 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn