Promise.all(只要失败一个就不会走then)的解决方案
Promise all 特性(只要失败一个就不会走then)的解决方案
·
因为我们经常会使用到接口的重复调用问题或链式调用接口
- Promise.all 很舒服的解决了这些问题
但是Promise.all的特性 是会执行里面的所有异步操作,遇到抛错就取消执行,并不会继续往下执行了。
有时我们 需要能继续执行下去。这样也是有方法能实现的…
// 代码 解决:在catch里面resolve就行了
// 测试了下 解决方式还能实现
var p1 = new Promise(resolve => {
let p1Data = b;
resolve(p1Data)
}).catch(err => {
return Promise.resolve("P1 无数据")
})
var p2 = new Promise(resolve => {
let p2Data = 'p2的有数据';
resolve(p2Data)
}).catch(err => {
return Promise.resolve("P2 无数据")
})
Promise.all([p1, p2]).then(res => {
console.log(res);
}).catch(err => {
throw new Error("Promise 执行错误", err)
})
执行结果
这样就不会 出错就不往下执行啦
- Promise.race的使用
Promse.race 特性就是赛跑的意思,意思就是说,Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
},1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('failed')
}, 500)
})
Promise.race([p1, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error) // 打开的是 'failed'
})
所以这个还是挺好理解,不管成功或失败,只返回第一个执行结束的
更多推荐
所有评论(0)