如何使用 JavaScript 的 Promise.allSettled() 函数
Promise.allSettled()
类似于 Promise.all()
有两个主要区别:
allSettled()
无论其中一项承诺是否被拒绝,都会解决allSettled()
将返回一个对象数组,而不是一个数组,它包含{status, value, reason}
描述每个承诺是被履行还是被拒绝。
回想一下, promise 是一个具有 3 个状态的状态机 :
- Pending 操作正在进行中。
- Fulfilled 操作成功完成。
- 已拒绝 操作遇到错误。
Settled 表示承诺要么被履行要么被拒绝,所以你可以想到 allSettled()
就像等待数组中的所有承诺都得到解决一样。
返回值
allSettled()
将包含一个对象数组,其中包含 {status: 'fulfilled', value}
如果承诺得到履行或 {status: 'rejected', reason}
如果承诺被拒绝。
// [{ status: "fulfilled", value: "Hello World" }, { status: "rejected", reason: "fail" }]
const res = await Promise.allSettled([Promise.resolve('Hello World'), Promise.reject('fail')]);
要检查是否有任何承诺被拒绝,您可以使用 Array#find()
功能 :
res.find(({ status }) => status === 'rejected');
浏览器支持
allSettled()
Internet Explorer 和低于 12.9 的 Node.js 版本不支持。 但是,您可以使用 Promise.all()
对于不支持的环境 allSettled()
如下所示:
function allSettled(promises) {
const _promises = promises.map(p => {
return p.
then(value => ({ status: 'fulfilled', value })).
catch(reason => ({ status: 'rejected', reason });
});
return Promise.all(_promises);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论