2024年你还不知道Promise.allSettled()么?

定义:

Promise.allSettled是一个方法,它允许你同时处理多个 promise,并获得每个 promise 的结果,无论它是 resolve 还是 reject。它返回一个带有一组 promise 处理结果数组的被 fulfill 的 promise。

Promise.allSettled() 是:

- 该方法允许你同时处理多个 promise

- 获得每个 promise 的结果,无论它是 resolve 还是 reject

- 与Promise.all不同,如果数组中任何一个 promise reject,Promise.all会立即 reject

- 返回一个带有 promise 处理结果数组的被 fulfill 的 promise

Promise.allSettled() 方法的语法:


Promise.allSettled(iterable);  

*iterable 包含了 promises。

示例:

Promise.allSettled([
  Promise.resolve(33),
  new Promise(resolve => setTimeout(() => resolve(66), 0)),
  99,
  Promise.reject(new Error("an error")),
]).then(values => console.log(values));

// [
//   { status: 'fulfilled', value: 33 },
//   { status: 'fulfilled', value: 66 },
//   { status: 'fulfilled', value: 99 },
//   { status: 'rejected', reason: Error: an error } 
// ]

当你有多个不依赖于彼此成功完成的异步任务,或者你总是想知道每个 promise 的结果时,通常会使用 Promise.allSettled()Promise.allSettled() 返回一个待处理的 promise,它会在每个输入的 promise 都已处理后异步完成。

Promise.allSettled() 方法返回一个 promise,该 promise 会解析成一个数组,数组中是每个输入 promise 结果的对象描述。

Promise.allSettled() vs Promise.all()

当你想等待多个 promise 完成并获得所有解析值的数组时,Promise.all() 非常有用。

**注:如果任何 promise 被 reject,整个 Promise.all() 会立即 reject。**

Promise.allSettled() 的工作机制与 Promise.all() 类似,但是不是在任何 promise reject 时立即 reject,而是**等待**所有 promise 处理完成(resolve 或 reject)后再返回每个 promise 的状态和值/原因的对象数组。

结论

以下是一些 Promise.allSettled 可能有用的场景:

1. 收集多个 API 请求的结果:如果你需要发出多个 API 请求并希望单独处理每个响应,无论任何请求是否失败,你都可以使用 Promise.allSettled同时执行所有请求并获取结果。

2. 异步任务的批量处理:如果你有一批相互独立的异步任务要并发执行,并且你需要分别知道每个任务的结果,Promise.allSettled 可以帮助你收集每个任务的结果。

3. 错误处理和优雅降级:如果你有一些对整个应用程序流程不关键的异步操作列表,无论成功或者失败,你都希望在不中断其他任务执行的情况下处理它们,那么 Promise.allSettled 是很有用的选择。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也想MK代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值