首页 >web前端 >js教程 >如何在 JavaScript 中处理多个 Promise,包括被拒绝的 Promise?

如何在 JavaScript 中处理多个 Promise,包括被拒绝的 Promise?

Susan Sarandon
Susan Sarandon原创
2024-12-18 06:07:14889浏览

How Can I Handle Multiple Promises, Including Rejected Ones, in JavaScript?

使用混合解决方案处理 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中文网其他相关文章!

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