AngularJS: Forwarding rejection of a promise to the next promise in chain
Note that this is somewhat similar to `try/catch/throw`.
by Ahmad Baktash Hayeri
HTML
<div ng-app="app">
<div ng-controller="ctrl">
<pre>PromiseA Status: {{ !promiseAStatus ? 'Pending' : promiseAStatus }}</pre>
<pre>PromiseB Status: {{ !promiseBStatus ? 'Pending' : promiseBStatus }}</pre>
<pre>PromiseC Status: {{ !promiseCStatus ? 'Pending' : promiseCStatus }}</pre>
</div>
</div>
JavaScript
angular.module('app', [])
.controller('ctrl', function($scope, $q, $timeout){
var promiseA = $q.defer(),
promiseB = $q.defer();
$timeout(function(){
$scope.promiseAStatus = 'Rejected';
promiseA.reject('Unknown');
//promiseA.resolve('All clear!');
}, 3000);
promiseB = promiseA.promise.then(function(){
console.log('a is done')
}, function(reason){
return $q.reject(reason);
});
promiseC = promiseB.then(function(response){
$scope.promiseBStatus = 'Done => reason :' + response;
}, function(reason){
$scope.promiseBStatus = 'Failed => reason: ' + reason;
return $q.reject(reason)
});
promiseC.then(function(){
$scope.promiseCStatus = 'Success';
}, function(reason){
$scope.promiseCStatus = 'Failed again => reason: ' + reason;
})
});