使用Q.allSettled时Q.fail无法正常工作

时间:2015-03-11 21:15:47

标签: javascript node.js q

使用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块?

1 个答案:

答案 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);
});