У меня есть служба, которая интегрируется с внешним API. Этот API несовместим и вряд ли изменится.Обработка ошибок при 200 HTTP-ответе с использованием перехватчиков
Внутри API есть 2 метода сообщения об ошибке, один ответ с кодом HTTP 500, другой нормальный ответ 200 HTTP, но с status
в JSON установлен на «ошибка».
Handling 500 ошибок работает нормально, я только что создал перехватчик (ngResource перехватчик, а не $ HTTP один) с responseError
метод, который будет отображать сообщение об ошибке для пользователя, когда есть какие-либо 500 ответа от API:
.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
. Я не хочу, чтобы обратный вызов нормального успеха (переданный в метод из экземпляра ресурса) вызывался при возникновении ошибки, я хочу, чтобы один глобальный обработчик ошибок, но ничего не пробовал до сих пор. Каждый раз, когда ответ передается в обратный вызов. Я пытался до сих пор:
- возвращение $ q.reject в
response
методе из перехватчика - изменения коды состояния в ответ на 500 внутри
response
метода от перехватчика - изменения или удаления response.resource в
response
методе от перехватчика
Идеальное решение будет, когда не будет вызван нормальный обратный вызов, но вместо этого будет называться мой метод responseError
от перехватчика.
Как я могу поймать эту заброшенную ошибку? – GwynBleidD