问题:
1.使用promise.all的时候,只要有一个执行reject,promise.all就会进入catch回调。现在想要做到promise.all中即使一个promise进入了reject,promise.all依然能把其他数据正确返回。
这时需要对promise.all中的promise函数数组进行处理。
promiseList.map(item =>{
return item.catch(err=>{
return err;
})
})
完成代码如下:
<template>
<div>promiseAll</div>
</template>
<script>
export default {
name:"promiseAll",
mounted(){
let promiseList =[];
promiseList.push(this.promiseResolve(1),this.promiseReject(2),this.promiseResolve(3));
Promise.all(promiseList.map(item =>{
return item.catch(err=>{
return err;
})
})).then(res=>{
console.log(res, 'success')
}).catch(error=>{
console.log(error, 'error')
})
},
methods:{
promiseResolve(n){
return new Promise(resolve=>{
setTimeout(()=>{
resolve(`resolve${n}`)
},n*100)
})
},
promiseReject(n){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
reject(`reject${n}`)
},100*n)
})
}
}
}
</script>
原理解释:使用promiseList.map(item =>item.catch(err =>err)) 这时return 出去的仍然是一个promise对象,这时打印promiseList如下:
都是promise对象并且状态都是fulfilled.。
现在在来看三行代码:
从以上可以看出Promise执行.then/.catch回调之后返回的都是一个promise对象。
我们可以看一下promise源码:
可以看到catch回调返回的就是promise.then