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

Why is the response with error code (500) treated as successful response while using 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,它显示了不同的实现,但我更愿意使用拦截器。

这是一个已知问题吗?

通过 returning 您的对象 "normally",您告诉 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);
}

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

明确地执行此操作