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

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

Patricia Arquette
发布: 2024-12-15 17:21:16
原创
580 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板