Bootstrap

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

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;