断开承诺链,并根据链中该函数中断(拒绝)的步骤调用函数
更新:
为了帮助这篇文章的未来观众,我创建了这个羽毛答案的演示。
问题:
我的目标似乎相当简单。
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上失败,两个AND都会被触发。如果我不这样做,那么就不会被解雇,但会被解雇,我理解这一点。我已经完成了一切,除了我想做的事情。stepError(1)
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);
}