更新:
为了帮助这篇文章的未来观众,我创建了这个 pluma 答案的演示。
问题:
我的目标似乎相当简单。
step(1)
.then(function() {
return step(2);
}, function() {
stepError(1);
return $q.reject();
})
.then(function() {
}, function() {
stepError(2);
});
function step(n) {
var deferred = $q.defer();
//fail on step 1
(n === 1) ? deferred.reject() : deferred.resolve();
return deferred.promise;
}
function stepError(n) {
console.log(n);
}
这里的问题是,如果我在第 1 步失败,两个stepError(1)
AND 都会stepError(2)
被触发。如果我不return $q.reject
那么stepError(2)
就不会被解雇,但step(2)
会,我明白了。除了我想要做的,我已经完成了所有的事情。
如何编写Promise,以便在拒绝时调用函数,而不调用错误链中的所有函数?或者有另一种方法来实现这一目标吗?
这是一个现场演示,因此您可以使用一些东西。
更新:
我有种已经解决了它。在这里,我在链的末尾捕获错误并将数据传递给,reject(data)
以便我知道在错误函数中要处理什么问题。这实际上不符合我的要求,因为我不想依赖数据。这会很蹩脚,但在我的情况下,将错误回调传递给函数会更清晰,而不是依赖返回的数据来确定要做什么。
step(1)
.then(function() {
return step(2);
})
.then(function() {
return step(3);
})
.then(false,
function(x) {
stepError(x);
}
);
function step(n) {
console.log('Step '+n);
var deferred = $q.defer();
(n === 1) ? deferred.reject(n) : deferred.resolve(n);
return deferred.promise;
}
function stepError(n) {
console.log('Error '+n);
}