I need to create chained 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;
});
If I put an errorCallback into the first then
, the second then
will be resolved and its successCallback will be called . But if I remove errorHandler
then second promise will be rejected.
According to Angular JS docs the only way to propagate rejection is to return $q.reject();
and it looks not obvious, especially because I have to inject $q
service even if it is not needed;
It can also be done by throwing an exception in errorHandler
, but it writes exception trace to console, it is not good.
Is there another option to do this in a clear way? And what is the reason? Why it is done? In which case, the current behavior can be useful?