У меня возникли проблемы с пониманием базовой концепции обработки ошибок с обещаниями цепочки. Чтобы узнать правила, я написал простой пример, угадав, каким будет результат. Но, к несчастью, он не ведет себя так, как я бы это сделал. Я прочитал несколько статей о предмете, но, возможно, не могу получить детали из-за моего плохого английского языка.
Во всяком случае, вот мой код:
var promiseStart = $q.when("start");
var promise1 = promiseStart.then(function() {
return Serviceforpromise1.get();
});
var promise2 = promise1.then(function(data1)
{
return Serviceforpromise2.get(data1);
},function(error)
{
return $q.reject();
});
var promiseend = promise2.then(function(data2)
{
return data2;
},function(error)
{
return error;
});
return promiseend;
Ну, я знаю, что это может быть намного лучше закодированы, но это только для этой цели. Вот код функции Serviceforpromise1:
function Serviceforpromise1()
{
...
return $http.get(*whatever*).then(function (data){
return data;
},function(error)
{
return $q.reject();
});
}
Рассмотрим только случай отказа Serviceforpromise1 в. A $ q.rejec t отправляется обратно в основную цепочку, поэтому я жду обратного вызова ошибки «prom1. Then (», который будет вызван, и это сработало, как ожидалось. Я решил на примере передать ошибку «promise2 .then» поэтому в этих обратных ошибках я добавил строку возврата $ q.reject(); Но он никогда не достиг обратного вызова второй ошибки (в «promise2 .then» один), и я дон Не понимаю, почему (например, Serviceforpromise1, я вернул отклоненное обещание!)
Я буду рад глубоко понять, что здесь происходит. Спасибо за ваш Помогите.
Как вы отметили, что обратный вызов ошибки 'prom2' не вызывается? Я ничего не вижу там, что скажет вам, вызвано ли это. – JLRishe
Да, я вхожу в консоль, но удаляю код регистрации для сообщения, чтобы не беспокоиться о несущественных строках. –