promise

一、promise

1、返回一个promise对象 成功 失败 进行中三种状态 一旦改变不可逆

二、promise方法

promise.all(params)

入参params由多个promise组成的一个数组[promise1,promise2,promise3]

请求顺序promise1,promise2,promise3按顺序发起,

都成功:promise.all会等所有promise都成功结束后重新映射将请求结果按照入参的顺序排列后返回一个数组[res1,res2,res3],即res1对应promise1的结果,res2对应promise2的结果,,尽管三个请求完成的顺序可能不同,比如promise1请求接口用时5秒,promise3用时2秒,

有一个失败:有一个失败则直接走promise.all 的catch,即只要失败一个就不会走then

特殊处理:由于Promise.all执行的一堆Promise中,若有一个执行失败,则全部执行失败,返回执行失败的那个数据,如果我们也想要其他的执行正确的结果可以做如下处理:

当promise数组中有接口reject时,catch住结果直接返回,这样失败的结果就相当于该promise执行完的结果,也可以当做成功处理,所以在promise.all中我们可以监听到所有结果的返回

方案一:在单个promise上做catch捕获,为每个promise关联一个错误的处理函数

                   

let promise1 = new Promise((resolve, reject) => {
    reject("我是promise1失败")       
}).catch(err => {
     return err
})

let promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
       resolve("我是promise2成功")
    }, 2)
}).catch(err => {
     return err
})
promise.all([promise1 ,promise2])
    .then(res=>console.log(res)) // ['我是promise1失败', '我是promise2成功']
    .catch(err=>cosole.log(err))

方案二 在入参中处理

 Promise.all([promise1, promise2].map(p => p.catch(err => err)))
        .then(res => {
              console.log(111, res)
         })
        .catch(err => {
               console.log(222, err)
         })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值