$q.reject and handling errors in AngularJS chained promises

前端 未结 1 1236
情书的邮戳
情书的邮戳 2021-01-05 13:50

I\'m having trouble understanding a basic concept of error handling with chaining promises. In order to learn the rules, I have written a simple example, guessing what the r

相关标签:
1条回答
  • 2021-01-05 14:23

    Your understanding is correct, and the problem appears to lie somewhere in the way you are trying to observe this behavior (in something you haven't shown us).

    If you return a rejected promise from either a success or error handler in then(), then the promise returned by then() will resolve to a rejected promise. Observe:

    angular.module('app', [])
        .controller('C', [
        '$q',
    
    function ($q) {
        var promiseStart = $q.when("start");
        var promise1 = promiseStart.then(function (value) {
            console.log('Got a value:', value);
            return $q.reject('Error!');
        });
    
        var promise2 = promise1.then(function (data1) {
            return "Got some stuff";
        }, function (error) {
            console.log("Caught an error:", error);
            return $q.reject('New error');
        });
    
        var promiseend = promise2.then(function (data2) {
            return data2;
        }, function (error) {
            console.log('Caught an error:', error);  // <-- this is logged to the console
            return error;
        });
    
        return promiseend;
    }]);
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script>
    <div ng-app='app' ng-controller='C'></div>

    One thing to note here is that in that last handler, you are returning the error variable, and not throwing an exception or returning a rejected promise. So in this case, promiseend will successfully resolve with the value of that error variable.

    0 讨论(0)
提交回复
热议问题