Как обработать ошибку при выполнении HTTP-запроса в AngularJS?

Пользователь

от taylor , в категории: Компьютерные технологии , год назад

Как обработать ошибку при выполнении HTTP-запроса в AngularJS?

Facebook Vk Ok Twitter Telegram Whatsapp

1 ответ

Пользователь

от verla , год назад

@taylor 

В AngularJS для обработки ошибок при выполнении HTTP-запросов можно использовать механизм обещаний (Promise). Каждый HTTP-запрос возвращает обещание, которое может быть обработано при успешном выполнении запроса или при возникновении ошибки.


Пример использования механизма обещаний для обработки ошибки при выполнении HTTP-запроса:

1
2
3
4
5
6
7
$http.get('/someUrl')
  .then(function(response) {
    // успешное выполнение запроса
  }, function(error) {
    // ошибка выполнения запроса
    console.log('Error:', error);
  });


В данном примере мы отправляем GET-запрос по адресу '/someUrl'. Если запрос выполнится успешно, обработчик then будет вызван с параметром response, который будет содержать ответ на запрос. Если же запрос завершится с ошибкой, обработчик then будет вызван с параметром error, который будет содержать информацию об ошибке.


Также можно добавить глобальный обработчик ошибок используя сервис $httpProvider:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$httpProvider.interceptors.push(function($q, $injector) {
    return {
        responseError: function(rejection) {
            if (rejection.status === 401) {
                $injector.get('$state').go('login'); // перенаправление на страницу авторизации
            } else {
                console.error('HTTP error:', rejection);
            }
            return $q.reject(rejection);
        }
    };
});


В этом примере мы добавляем перехватчик (интерсептор) $httpProvider, который будет вызываться в случае возникновения ошибки при выполнении запроса. Метод responseError будет вызван, если запрос завершится неудачно. Внутри этого метода мы можем обработать ошибку и выполнить дополнительные действия (например, перенаправление на страницу авторизации). Возвращаемое значение $q.reject(rejection) отклоняет обещание и передает ошибку в обработчики ошибок.