种草 ES2020 新特性

这几年,ECMA TC39一年一次更新 ECMAScript 规范标准,截止目前,一下特性已进入 finished 状态。现在带大家体验种草 ES2020 新特性。
一、Promise.allSettled
Promise.all 缺陷
都知道 Promise.all 具有并发执行异步任务的能力。但它的最大问题就是如果其中某个任务出现异常(reject),所有任务都会挂掉, Promise 直接进入 reject 状态。
想象这个场景:你的页面有三个区域,分别对应三个独立的接口数据,使用 Promise.all 来并发三个接口,如果其中任意一个接口服务异常,状态是 reject,这会导致页面中该三个区域数据全都无法渲染出来,因为任何 reject 都会进入 catch 回调,很明显,这是无法接受的。如下:

Promise.all([
	Promise.reject({
   code: 500, msg: '服务器异常'}),
	Promise.resolve({
   code: 200, list: []}),
	Promise.resolve({
   code: 200, list: []})
  ])
  .then((ret) =>{
   
      //如果其中一个任务是reject,则不会执行到这个回调
      RenderContent(ret);
  })
  .catch((error) => {
   
      // 本例中会执行到这个回调
      // error: {code: 500, msg: '服务器异常'}
  })

Promise.allSettled 的优势
我们需要一种机制,如果并发任务中,无论一个任务正常或者异常,都会返回对应的状态(fullfilled 或者 rejected)与结果(业务 value 或者 拒因 reason),在 then 里面通过 filter 来过滤出想要的业务逻辑结果,这就能最大限度的保障业务当前状态的可访问性,而 Promise.allSettled 就是解决这个问题的。

Promise.allSettled([
	Promise.reject({
   code: 500, msg: '服务器异常}),
	Promise.resolve({
   code: 200, list: []}),
	Promise.<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值