通过Promise.resolve捕获的被拒绝的承诺未被Promise.all[UI5]识别



给定一个promisesArray,如果您以这种方式添加promises

promisesArray.push(
Promise.resolve(promise1)
.catch((err) => {
console.log("Hello World");
})
);

如果一些promisesPromise.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); 
}
})
);

最新更新