【发布时间】:2013-12-09 16:31:24
【问题描述】:
为什么任何deferred.reject() 调用最后都不会触发.fail() 处理程序?如何使用嵌套的 Promise 触发单个错误处理程序?我需要闭包的嵌套承诺。
当我在d1 上触发拒绝时,它仍然一直到d2 的解决/拒绝。如果我将.fail() 添加到d1 的块中,那么它确实会收到拒绝。但这就是我要避免的,每个嵌套承诺的 .fail() 处理程序。
var Q = require('q');
somePromise().then(function (v1) {
var d1 = Q.defer();
asyncFunc1(v2, function (err, v3) {
if (!v3)
d1.reject(new Error('error'));
else
d1.resolve(true);
return d1.promise.then(function (promise1Kept) {
var d2 = Q.defer();
asyncFunc2(v4, function (err, v5) {
if (!v5)
d2.reject(new Error('error'));
else
d2.resolve(true);
});
return d2.promise.then(function (promise2Kept) {
console.log('end of promise chain');
});
});
});
}).fail(function (err) {
console.log('Error!');
console.log(err);
});
【问题讨论】:
-
当你运行这个时你会得到什么输出?
-
@user568109 添加了更多细节并修正了一些错别字。
-
你能说出你为什么不想要
fail吗?有必要(这个或then)执行错误处理程序。默认情况下没有错误处理程序。它只会遇到错误并停止。