首頁 > web前端 > js教程 > 在 JavaScript 中使用 Promise 時如何優雅地處理網路故障?

在 JavaScript 中使用 Promise 時如何優雅地處理網路故障?

Patricia Arquette
發布: 2024-12-15 17:21:16
原創
579 人瀏覽過

How Can I Gracefully Handle Network Failures When Using Promises in JavaScript?

使用 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中文網其他相關文章!

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