簡體   English   中英

如何將帶有最終錯誤的Q Promise鏈接到finally()

[英]How to chain Q promise with previous errors on finally()

我想知道如何最終使用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()中的一個錯誤覆蓋(例如:連接關閉錯誤)。 所以,我想知道如何獲取所有錯誤

謝謝

您可以執行以下操作:

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的AggregateError

當然這很乏味,但是我無法想象更好的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM