给定一个promisesArray
,如果您以这种方式添加promises
:
promisesArray.push(
Promise.resolve(promise1)
.catch((err) => {
console.log("Hello World");
})
);
如果一些promises
被Promise.resolve
捕获,则稍后的Promise.all
不会将该promises
识别为被拒绝的
Promise.all(promisesArray)
.then(()=> {
//do something
}, catch => {
//error handling
})
因此,去.then
做一些事情阻止
问题:如果您希望Promise.all
执行捕获块,在这种情况下该怎么办?
您可以尝试Promise.allSettled'而不是Promise.all
来获得{status, value}
对象的数组,该数组允许您检查事件后哪些承诺成功,哪些承诺失败。推送阶段简化为
promisesArray.push( promise1) // etc
之后你可以查看发生了什么:
Promise.allSettled(promisesArray).then( resultArray => {
resultArray.forEach( (result, index) =>
if( result.status == "fulfilled") {
console.log( "promise %s was rejected with reason", index, result.reason);
}
else {
console.log( "promise %s was fulfilled with value", index, result.value);
}
})
);