首页 >web前端 >js教程 >在 JavaScript 中使用 Promise 时如何优雅地处理网络故障?

在 JavaScript 中使用 Promise 时如何优雅地处理网络故障?

Patricia Arquette
Patricia Arquette原创
2024-12-15 17:21:16644浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn