q.js自动传播错误(捕获异步抛出错误)?

我想知道是否有任何方法可以自动将错误从承诺传播到另一个承诺? IE:从嵌套的promise中捕获抛出的错误.

例如,在下面的代码示例中,“internalWorker”嵌套的promise函数需要

.fail(function(error){
            return deferred.reject(error);
        });

为了传播错误.如果未包含此行,则错误将抛到顶部. (崩溃的应用程序)

是否可以自动传播错误,所以我不需要将.fail()函数添加到我所有嵌套的promises中?

“`

function top(input) {
    var deferred = q.defer();

    internalWorker(input).then(function (value) {
        logger.inspectDebug("top success", value);
    }).fail(function (error) {
        return deferred.reject(error);
    });

    return deferred.promise;
}

function internalWorker(input) {
    var deferred = q.defer();

    q.delay(100).then(function () {
        throw new Error("internal worker async error");
    }).fail(function (error) {
        return deferred.reject(error);
    });

    return deferred.promise;
}

top("hello").then(function (value) {
    logger.inspectDebug("outside success", value);
}).fail(function (error) {
    logger.inspectDebug("outside fail", error);
}).done();

“`

最佳答案 如果您使用的是
https://github.com/kriskowal/q,这将按照您的意图执行:

function top(input) {
    return internalWorker(input).then(function (value) {
        logger.inspectDebug("top success", value);
        return value;
    });
}

function internalWorker(input) {
    return q.delay(100).then(function () {
        throw new Error("internal worker async error");
        return value;
    });
}

top("hello").then(function (value) {
    logger.inspectDebug("outside success", value);
}, function (error) {
    logger.inspectDebug("outside fail", error);
}).done();

从回调中返回承诺或值.错误会隐式传播.

点赞