我的 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
});
最佳答案
据我所知,您无法真正阻止拦截器在调用者函数之前捕获错误。确实这很烦人。
我的解决方案是向特定的 http 请求添加一个配置对象(我想要处理来自调用者的错误)。
例如使用 reangular 时:
myRestangularObject.get().withHttpConfig({handleByCaller: true})
在我的拦截器上:
if (rejection.config.handleByCaller && rejection.config.handleByCaller === true) {
return $q.reject(rejection);
}
我知道这是一个黑客行为,并不能回答你的问题,但正如我所说,我认为你无法避免首先执行拦截器。
关于javascript - angularjs防止错误冒泡到httpinterceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37889841/