如何将Q promise与之前的错误链接起来()

时间:2014-04-14 07:22:30

标签: javascript promise q

我想知道如何最终使用Q链接错误。

考虑以下代码

function p1() {
    throw new Error("p1 error");
}

function p2() {
    throw new Error("p2 error");
}

function p3() {
    return Q.fcall(p1)
        .finally(function () {
            return Q.fcall(p2);
        }); 
}

p3()
    .done();

错误消息“p1错误”丢失,因为它被错误“p2错误”覆盖。如何抛出所有错误(或合并错误)?

目前,我正在开发nodejs上的套接字连接。我使用.finally()在每次连接后关闭套接字。

然而,.finally()之前的错误(例如:身份验证错误)将被.finally()中的一个覆盖(例如:连接关闭错误)。所以,我想知道如何得到所有错误

由于

1 个答案:

答案 0 :(得分:0)

你可以这样做:

function p3() {
    return Q.fcall(p1)
    .finally(function(p) {
        return Q.fcall(p2).catch(function(e) {
            if (!p.isRejected()) throw e;
            var agg = new Error("multiple errors occured");
            agg[0] = p.inspect().reason;
            agg[1] = e;
            agg.length = 2;
            throw agg;
        });
    }); 
}

(基于Bluebird's AggregateError

当然这很乏味,但我无法想象更好的东西。