Мне нужно создать цепочку promises:
var deferred = $q.defer();
$timeout(function() {
deferred.reject({result: 'errror'});
}, 3000);
deferred.promise.then(angular.noop, function errorHandler(result) {
//some actions
return result;
}).then(function successCallback(result) {
console.log('what do I do here?');
return result;
}, function errorCallback(result) {
$scope.result= result;
return result;
});
Если я поместил errorCallback в первый then
, второй then
будет разрешен и будет вызван его successCallback. Но если я удалю errorHandler
, то второе обещание будет отклонено.
В соответствии с Angular JS docs единственным способом распространения отклонения является возврат $q.reject();
, и это выглядит не очевидным, особенно потому, что мне нужно внедрить сервис $q
, даже если он не нужен;
Это также можно сделать, выбросив исключение в errorHandler
, но он пишет трассировку исключения для консоли, это не хорошо.
Есть ли еще один способ сделать это ясным способом? И в чем причина? Почему это делается? В этом случае может быть полезно текущее поведение?