为什么在使用拦截器时,错误代码(500)的响应被视为成功响应

时间:2017-04-24 09:23:18

标签: angularjs http response interceptor

我正在尝试使用Angular拦截器来处理我的500403错误代码。对于其他代码,我有自定义业务实现。然而,似乎使用拦截器使Angular将错误响应视为成功响应,并调用.then中的成功回调。这不是很奇怪,考虑到200-299代码只被视为成功回应的文档。

我的代码:

function appInterceptorFn(){
        var interceptor = {
            responseError: function (config) {
                if (config && config.status === cramConfig.FORBIDDEN_ACCESS_CODE) {
                    $rootScope.$emit('ERROR_EVENT', config);
                }
                return config;
            }
        }

        return interceptor;
    }

是否可以采取措施避免它,我正在使用AngularJS v1.3.17

我已经访问过此link,它显示了不同的实现,但我想优先使用拦截器。

这是一个已知问题吗?

1 个答案:

答案 0 :(得分:2)

通过返回您的对象"通常",您告诉angular将您的错误视为成功。

您必须更换

  return config;

  return $q.reject(config);

<强>解释

如果您查看此处的文档:https://docs.angularjs.org/api/ng/service/$http#interceptors,您会看到以下内容:

// optional method
'responseError': function(rejection) {
   // do something on error
   if (canRecover(rejection)) {
     return responseOrNewPromise
   }
   return $q.reject(rejection);
}

我知道它不是很多文档,但是它告诉你如果你返回一个对象或一个promise,它会解决你的错误,好像没有错误一样。如果您希望重新抛出错误,则必须使用$q.reject()

明确地执行此操作