我想知道是否有任何方法可以自动将错误从一个承诺传播到另一个承诺? IE:从嵌套承诺中捕获抛出的错误。
例如,在下面的代码示例中,"内部工作线程"嵌套承诺函数需要
.fail(function (error) {
return deferred.reject(error);
});
为了传播错误。 如果未包含此行,则错误将抛到顶部。(崩溃的应用程序)
是否可以自动传播错误,这样我就不需要将 .fail() 函数添加到我所有的嵌套承诺中?
'''
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();
从回调中返回承诺或值。错误隐式传播。