promise对于多个请求情况的处理

原文

先实例化三个promise:

let p1=new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve(`这个是p1的成功回调`);
            },500);
        })
        
        let p2=new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve(`这个是p2的成功回调`);
            },100);
        })
        
        let p3=new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve(`这个是p3的成功回调`);
            },800);
        })

情景一:不在乎各个请求的结果,只需要进行了即可。

解决:

p1.then((data)=>{
      console.log(data);
})
p2.then((data)=>{
       console.log(data);
})

情景二:需要在p1后再请求p2,并且p2用到p1的结果,p1,p2完成后再请求p3

p1.then((res1)=>{
            return res1;
        }).then((res1)=>{
            p2Request(res1);
        }).catch((error)=>{
            console.log(error);
        })
        
        let p2Request=(res1)=>{
            p2.then((data)=>{
                console.log(`${res1},${data}`);
            }).then(()=>{
                p3Request();
            }).catch((error)=>{
                console.log(error);
            })
        }
        
        let p3Request=()=>{
            p3.then((data)=>{
                console.log(`${data}`);
            })
        }

请求失败后的处理方法都写到响应的.catch方法里面

情景三:不在乎p1,p2,p3的先后顺序,但是需要在3者请求完成后再进行下一步的操作

let pNext=Promise.all([p1,p2,p3]);
        pNext.then((data)=>{
            console.log('所有请求都请求完毕');
        }).catch((error)=>{
            console.log('存在请求失败的情况');
        })

直接使用promise的.all方法,.all方法也是一个新的promise对象。

情景四:对于p1,p2,p3的请求,谁先得到结果(结果包括.then的和.catch的),就不执行下面的2个promise方法。

let pRace=Promise.race([p1,p2,p3]);
        pRace.then((data)=>{
            console.log(data);
        }).catch((error)=>{
            console.log(error);
        })

直接使用.race方法,有一个结果产生后,淘汰其他promise
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值