angularjs防止错误冒泡到httpinterceptor

时间:2016-06-17 20:23:37

标签: javascript angularjs angular-http-interceptors

我的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
               });

1 个答案:

答案 0 :(得分:0)

据我所知,你无法阻止拦截器在调用函数之前捕获错误。确实这很烦人。

我的解决方案是将配置对象添加到特定的http请求(我想要从调用者那里处理他们的错误)。

例如使用restangular时:

  myRestangularObject.get().withHttpConfig({handleByCaller: true})

和我的拦截器:

  if (rejection.config.handleByCaller && rejection.config.handleByCaller === true) {
     return $q.reject(rejection);
  }

我知道这是一个黑客,并没有回答你的问题,但正如我所说,我不认为你可以避免拦截器先被执行。