我有與外部API集成的服務。這個API不一致,不太可能改變。使用攔截器處理200個HTTP響應時的錯誤
內部API有2種報告錯誤的方法,一種是HTTP 500代碼響應,另一種是正常的200 HTTP響應,但是在JSON中設置爲status
設置爲「error」。
處理500錯誤工作正常,我剛創建的攔截器(ngResource攔截,而不是$ HTTP的一個)與responseError
方法,將顯示錯誤消息以用戶當有來自API的任何500響應:
.factory('ApiErrorHandling', ['ngDialog', function(ngDialog) {
return {
responseError: function(response) {
console.log(response);
var error_dialog = ngDialog.open({
template: '/api/error.html',
className: 'error',
preCloseCallback: function() {
if (response.data.status == 'fatal') {
window.location.href = '/';
} else if (response.data.status == 'error') {
var dialogs = ngDialog.getOpenDialogs();
for (var i in dialogs) {
var dialog = dialogs[i];
if (dialog != error_dialog.id) {
ngDialog.close(dialog);
}
}
}
},
data: {
code: response.data.code,
status: response.data.status,
message: response.data.message,
httpCode: response.status,
}
});
},
}
}])
.factory('ApiMethod', ['$resource', 'ApiErrorHandling', function($resource, ApiErrorHandling) {
return $resource('/api/method/', {}, {
query: {method:'POST', interceptor: ApiErrorHandling},
});
}])
但我有處理與status
錯誤響應的問題。我不希望正常的成功回調(從資源實例傳入方法)在錯誤發生時被調用,我想要一個全局錯誤處理程序,但是我迄今爲止都沒有嘗試過。每次響應都被傳入回調。到目前爲止,我已經試過:
- 從攔截
- 在
response
方法返回$ q.reject響應不斷變化的狀態碼500內response
方法從攔截 - 在
response
方法更改或刪除response.resource從攔截器
理想的解決方案將是當正常的回調不會被調用,但我的responseError
方法從攔截器將被調用。
如何捕獲拋出的錯誤? – GwynBleidD