我正在处理这样的代码:
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?
我很可能误解了文档。
答案 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>