原文
先实例化三个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