Перехват ошибок сервера в Angular $ http и отклонение обещания

0

Я использую услугу "Угловой HTTP" и перехватываю ответ от сервера, чтобы поймать любые ошибки сервера и сделать некоторые вещи с ними (протоколирование и т.д.), Прежде чем отказаться от обещания.

В стороне, я иногда получаю такие вещи, как ошибки проверки в теле ответа, хотя код состояния - 200. Я знаю, что это не идеальный, но, пожалуйста, не зацикливайтесь на этом, поскольку это не причина моей проблемы. Я думал, что упомянул об этом, хотя он объясняет, почему я перехватываю ответ и responseError

$httpProvider.interceptors.push(function($log, $rootScope, $q) {

    return {
        response: function(response) {

            if (response.data && response.data.success === false) {
                doSomeStuff(response);
                return $q.reject(response);
            }
            else{
                return response;
            }

        },
        responseError: function(rejection) {
            doSomeStuff(rejection);
            $q.reject(rejection);
        }

    };

});

Тогда типичный HTTP-вызов в моем приложении может выглядеть так.

$http.post('https://domain.com/api/whatever', data).then(function (response) {
    console.log("Don't do this when an error is returned")
});

К сожалению, console.log всегда работает, даже если есть ошибка HTTP, или статус 200 со встроенными ошибками.

Я уверен, что я просто не понимаю, как работает $ http/$ q, и кто-то сможет меня расставить прямо.

Теги:
promise

1 ответ

1
Лучший ответ
$q.reject(rejection);

возвращает новое отклоненное обещание, оно не влияет на состояние существующих обещаний. Фактически, все, что responseError делает здесь, это улавливает отказ и вместо этого возвращает undefined ответ.

Должен быть

    responseError: function(rejection) {
        doSomeStuff(rejection);
        return $q.reject(rejection);
    }
  • 0
    Я не могу поверить, что я пропустил это. Я уже делал это в разделе ответов, но не по какой-то причине в responseError.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню