$ q.reject不会在$ http.get()中重新抛出异常。然后()。catch()

时间:2015-07-10 13:28:40

标签: angularjs

我正在处理这样的代码:

return promise.then(function(url) {
    return $http.get(url, data);
}).then(function (response) {
    return response.data;
}).catch(function (response) {
    return $q.reject(response);
});

我想要做的就是拒绝“catch”块中的promise,以便我的$ exceptionHandler的自定义实现记录异常。

根据我的understanding of the documentation,下面的行应该重新抛出异常,但它没有这样做。因此,$ exceptionHandler永远不会处理异常:

return $q.reject(reason); // why isn't it rethrowing?

我很可能误解了文档。

1 个答案:

答案 0 :(得分:2)

错误正在重新抛出 - 因为控制器可以捕获错误并显示它。

angular.module('app', [])
  .controller('app', function($scope, service) {
    $scope.error = {}
    service
      .load('foo')
      .catch(function(error) {
        angular.extend($scope.error, {
          reason: error
        });
      });
  })
  .service('service', function($http, $q) {

    var promise = function promise() {
      var d = $q.defer();
      d.reject('some reason')
      return d.promise;
    }();

    this.load = function(url) {
      return promise
        .then(function() {
          return $http.get(url);
        })
        .then(function(response) {
          return response.data;
        })
        .catch(function(reason) {
          return $q.reject(reason);
        });
    }
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app='app'>
  <div ng-controller='app'>error: {{ error.reason }}</div>
</div>