2017-04-24 124 views
1

我正尝试使用Angular拦截器来处理我的500403错误代码。对于其他代码我有自定义业务实现。不过,它似乎使用拦截器使得Angular将错误响应视为成功响应,并且我调用了.then中的成功回调函数。考虑到200-299码只作为成功回应的文档,这不奇怪吗?为什么使用错误代码(500)的响应在使用拦截器时被视为成功响应

我的代码:

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这表明不同的实现,但我想用拦截器优选。

这是一个已知的问题?

回答

2

通过“正常”返回对象,您告诉角度将您的错误视为成功。

您必须更换

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

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

+0

哪个承诺会被拒绝。我是否必须从入境响应对象中作出承诺? –

+0

感谢您的时间男人..现在按预期工作.. !!! –

相关问题