使用Q.allSettled
时,我无法使用Q.fail
来解决错误。
如果我的promises
包含最终被拒绝的承诺,则此代码永远不会进入.fail
块
Q.allSettled(promises)
.then(function () {
// Handle success
})
.fail(function (err) {
console.log('IN ERRR', err);
});
});
.allSettled
的文档以此为例:
Q.allSettled(promises)
.then(function (results) {
results.forEach(function (result) {
if (result.state === "fulfilled") {
var value = result.value;
} else {
var reason = result.reason;
}
});
});
.allSettled
函数的预期行为是否未进入.fail
块?
答案 0 :(得分:5)
是的,.allSettled()
返回的承诺通过一系列所有结果来实现,无论是满足还是拒绝。
如果返回的promise以某种方式导致进入.then()
处理程序和 .fail()
处理程序,那么这将导致一些相当混乱的程序流并违反承诺合同。
如果你愿意,你可以这样做,但是:
Q.allSettled(promises)
.then(function (results) {
results
.filter(function (result) {
return result.state === "fulfilled";
})
.forEach(function (result) {
// handle each success
});
throw results.filter(function (result) {
return result.state !== "fulfilled";
});
})
.fail(function (err) {
console.log('IN ERRR', err);
});