Q.fail 使用 Q.allSettled 时不工作
Q.fail not working when using Q.allSettled
使用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
块?
是的,.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);
});
使用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
块?
是的,.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);
});