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