Я не могу обернуть голову, когда $ q/$ http должен запустить блок onReject
.
Скажем, у меня есть основной вызов:
$http.get('/users')
.then(function(res) {
return res.data;
}, function(err) {
console.log(err);
});
Если я получаю 500 Internal Server Error
я собираюсь закончить в onSuccess
блоке. Из моего скудного понимания обещаний, я думаю, это кажется правильным, потому что я технически получил ответ? Проблема является onSuccess
блок кажется, что неправильное место, чтобы иметь кучу
if(res.status >= 400) {
return $q.reject('something went wrong: ' + res.status);
}
Просто так, что мой onReject
блок получит пробег. Так оно и должно работать? Большинство людей обрабатывают 400+ статусов в блоке onSuccess
или же они возвращают отклоненное обещание, чтобы заставить блок onReject
? Не хватает ли я лучшего способа справиться с этим?
Я пробовал делать это в httpInterceptor
, но я не мог найти способ вернуть отклоненное обещание отсюда.
this.responseError = function(res) {
if(res.status >= 400) {
// do something
}
return res;
};
Если есть код ошибки 400+, то ваш блок успеха не будет хитом. Он будет вызывать ваш обработчик ошибок – rob
[На самом деле я уверен, что это не так) (https://github.com/angular/angular.js/blob/18a2e4fbfc44216c31bbcdf7705ca87c53e6f1fa/src/ng/http.js#L235-237) , – Bergi
Скорее всего, у вас есть 'httpInterceptor' для' responseError' - наличие перехватчика означает, что вы «обработали» ошибку (если вы явно не возвращаете $ q.reject'), что приводит к успешному обработчику для '$ http' –