2014-10-14 3 views
0

Итак, согласно документации (и практическому опыту;))метода «then» от AngularJS возвращает новое обещание (https://docs.angularjs.org/api/ng/service/ $ q «Интерфейс Promise API»).Отклонение в .then angularJS-цепочке обещаний

Рассмотрим фрагмент кода, как это:

// method somewhere in MyService service 
// ... 
loadItem = function() { 
    return OtherService.load().then(function(item) { 
     item.preprocessed = true; 
     return item; 
    }); 
} 
// end of loadItem method 

// Somewhere along the controller: 
MyService.loadItem().then(function(item) { 
    // do something with an item... 
    alert(item.preprocessed); 
}, function(error) { 
    alert('Error!'); 
}) 

Теперь я хочу, чтобы сделать некоторую обработку на обратный обещание стоимости, но в то же время я хочу отторжении быть протолкнул цепи обещает без меня, вручную отклоните обещание на каждом шаге. В приведенном выше примере, если элемент загружен нормально, для свойства preprocessed установлено значение true, а правильный обработчик на контроллере then() уволен, но когда что-то пойдет не так, и результат отклонения метода OtherService.load() отклонен, обработчик отклонения в код контроллера не будет запущен.

Есть ли способ преодолеть это, может быть, есть синтаксис, позволяющий пройти отбраковку?

ответ

1

Поскольку вы возвращаете обещание возвратить как часть вызова then в функции обратного вызова ошибки делает

return OtherService.load().then(function(item) { 
     item.preprocessed = true; 
     return item; 
    }, 
    function(error) { 
     return $q.reject(error); 
    }); 

И обратный вызов ошибки будет стрелять на контроллере.

Смежные вопросы