Javascript Q.使用Q.ALLSELD时失败不工作

Javascript Q.使用Q.ALLSELD时失败不工作,javascript,node.js,q,Javascript,Node.js,Q,使用Q.allsolited时,我不能使用Q.fail获取错误 如果我有承诺,其中包含一个最终被拒绝的承诺,则此代码永远不会进入.fail块 Q.allSettled(promises) .then(function () { // Handle success }) .fail(function (err) { console.log('IN ERRR', err); }); }); .allsolited的文档以此为例: Q.

使用
Q.allsolited
时,我不能使用
Q.fail
获取错误

如果我有
承诺
,其中包含一个最终被拒绝的承诺,则此代码永远不会进入
.fail

Q.allSettled(promises)
    .then(function () {
        // Handle success
    })
    .fail(function (err) {
        console.log('IN ERRR', err);
    });
});
.allsolited
的文档以此为例:

Q.allSettled(promises)
.then(function (results) {
    results.forEach(function (result) {
        if (result.state === "fulfilled") {
            var value = result.value;
        } else {
            var reason = result.reason;
        }
    });
});

.allsolited
函数的这一预期行为是否不会进入
.fail
块?

是的,
.allsolited()
返回的承诺通过一个包含所有结果的数组来实现,无论这些结果是满足还是拒绝

如果返回的承诺以某种方式导致进入
.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);
});