使用混合解决方案处理 Promise
在异步编程中,处理 Promise 集可能会带来挑战。考虑这样一种场景,您有多个网络请求,其中一个可能会失败。默认情况下,一旦一个 Promise 被拒绝,Promise.all() 就会停止进程并出现错误。如果您想捕获所有请求的响应,这可能并不理想。
没有 Promise 库的模式
一种不使用 Promise 库的解决方案涉及将每个 Promise 包装为“反映”功能。此函数返回一个新的 Promise,该 Promise 使用原始 Promise 中的值或错误进行解析,并包含指示成功或拒绝的“状态”属性。
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" }));
然后,您可以将每个 Promise 映射到 Reflect Promise 并调用映射数组上的 Promise.all():
var arr = [fetch('index.html'), fetch('http://does-not-exist')] Promise.all(arr.map(reflect)).then(function (results) { var success = results.filter(x => x.status === "fulfilled"); });
这种方法允许您处理成功和拒绝的 Promise
内置 Promise.allSettled()
请注意,现代浏览器和 JavaScript 环境现在有一个提供类似功能的原生 Promise.allSettled() 方法。它返回一个用一系列结果解析的承诺,每个结果代表相应原始承诺的状态和值(如果已实现)。
以上是如何在 JavaScript 中处理多个 Promise,包括被拒绝的 Promise?的详细内容。更多信息请关注PHP中文网其他相关文章!