2017-04-24 40 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

感謝您的時間男人..現在按預期工作.. !!! –