【问题标题】:angularjs prevent error from bubbling to httpinterceptorangularjs 防止错误冒泡到 httpinterceptor
【发布时间】:2016-06-18 18:35:52
【问题描述】:

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

【问题讨论】:

  • 需要更具体。我们不知道拦截器在做什么。提供相关代码

标签: javascript angularjs angular-http-interceptors


【解决方案1】:

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

我的解决方案是将配置对象添加到特定的 http 请求(我想处理来自调用者的错误)。

例如在使用 restangular 时:

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

在我的拦截器上:

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

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

【讨论】:

  • 感谢您的回复,但我没有使用restangular。还有其他不使用它的想法吗?
猜你喜欢
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
相关资源
最近更新 更多