allSettled()与all()的区别?promise初级篇

还不知道allSettled与all方法的区别吗?

介绍allSettled()

在es6推出的Promise实例中,有一个方法叫allSettled()。通过Promise.allSettled()可以接收一个数组,并且在数组里面的所有实例,全部执行完,再通过then方法或者catch方法,对数组里面的实例进行遍历与操作。上代码!!!

(function(window){
    let p1 = new Promise((resolve, reject) => {
    	//这里是通过setTimeout仿作了一个异步背景
        setTimeout(()=>{
            resolve('p1');
        },500)
    })
    let p2 = new Promise((resolve, reject) => {
        setTimeout(()=>{
            resolve('p2');
        },1000)
    })
    let p = Promise.allSettled([p1, p2]).then(res=>{
        console.log(res);
    })
})(window)

运行代码后:生成了一个长度为2的一个列表,并且如果是resovle返回的则是一个{status:“fulfilled”,value:“xxx”}的一个对象。然而,如果是reject返回,则是返回一个{reason: “xxx”,status: “rejected”}的对象。

0:
	status: "fulfilled"
	value: "p1"
	__proto__: Object
1:
	status: "fulfilled"
	value: "p2"
	__proto__: Object
length: 2
__proto__: Array(0)

介绍all()

Promise.all()与allSettled()差不多,all()也是可以接收一个数组,并且进行遍历。上代码!!!

(function(window){
     let p1 = new Promise((resolve, reject) => {
         setTimeout(()=>{
             resolve('p1');
         },500)
     })
     let p2 = new Promise((resolve, reject) => {
         setTimeout(()=>{
             resolve('p2');
         },1000)
     })
     let p = Promise.all([p1, p2]).then(res=>{
         console.log(res);
     }).catch(err => {
         console.error(err);
     })
 })(window)

代码运行后:则会返回一个长度为2的数组。

(2) ["p1", "p2"]

allSettled()与all()的区别

allSettled()与all()的有什么区别呢?

  1. 看了上面所返回的数据,各位才华横溢的程序猿们也看出来了,它们所返回的数据不太一样,all()返回一个直接包裹resolve内容的数组,则allSettled()返回一个包裹着对象的数组。
  2. 如果是all()的话,如果有一个Promise对象报错了,则all()无法执行,会报错你的错误,无法获得其他成功的数据。则allSettled()方法是不管有没有报错,把所有的Promise实例的数据都返回回来,放入到一个对象中。如果是resolve的数据则status值为fulfilled,相反则为rejected
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值