Обновление:
Чтобы помочь будущим зрителям этого сообщения, я создал эту демонстрацию ответа 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)
будет, что я понимаю. Я выполнил все, кроме того, что я пытаюсь сделать.
Как написать promises, чтобы я мог вызывать функцию при отказе, не вызывая все функции в цепочке ошибок? Или есть другой способ сделать это?
Вот живая демонстрация, с которой вы что-то работаете.
Обновление:
I вид решил. Здесь я поймаю ошибку в конце цепочки и передаю данные на 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);
}