我的angularjs应用程序有一个http拦截器可以捕获任何http异常并处理它们。在某些情况下,我想从请求中捕获错误并在那里处理它们,防止错误冒泡到拦截器。有谁知道这怎么可能? 这是拦截器:
angular.module('x')
.factory('HttpErrorHandlerFactory', ['$q', '$rootScope', function ($q, $rootScope) {
return {
'responseError': function (rejection) {
if (rejection.status == 0) return $q.reject(rejection);
if (rejection.data === '')
rejection.data = 'Error';
$rootScope.Message.Value = rejection.data;
return $q.reject(rejection);
}
};
}]);
这是在应用级别设置的,因此任何经过的http请求都会被捕获。如果它们出错,它会抓住它们并显示消息。
通常,我们有这样的电话:
someFactory.GetSomething(scope.id)
.success(function (result) {
//do something with result
}).error(function(error){
//MY QUESTION IS, HOW TO GET THIS ERROR TO NOT BUBBBLE UP TO THE INTERCEPTOR
});
答案 0 :(得分:0)
据我所知,你无法阻止拦截器在调用函数之前捕获错误。确实这很烦人。
我的解决方案是将配置对象添加到特定的http请求(我想要从调用者那里处理他们的错误)。
例如使用restangular时:
myRestangularObject.get().withHttpConfig({handleByCaller: true})
和我的拦截器:
if (rejection.config.handleByCaller && rejection.config.handleByCaller === true) {
return $q.reject(rejection);
}
我知道这是一个黑客,并没有回答你的问题,但正如我所说,我不认为你可以避免拦截器先被执行。