Как поймать NetworkError в JavaScript?
В консоли Chrome JavaScript, если я запустил это:
var that = new XMLHttpRequest();
that.open('GET', 'http://this_is_a_bad_url.com', false);
that.send();
Я получаю преднамеренно ожидаемую ошибку:
NetworkError: A network error occurred.
Я хочу поймать это, поэтому я использую:
var that = new XMLHttpRequest();
that.open('GET', 'http://this_is_a_bad_url.com', false);
try {
that.send();
} catch(exception) {
if(exception instanceof NetworkError) {
console.log('There was a network error.');
}
}
Тем не менее, я получаю сообщение об ошибке NetworkError:
ReferenceError: NetworkError is not defined
Как я могу поймать NetworkError?
Ответы
Ответ 1
Я думаю, что вы имели в виду:
if(exception.name == 'NetworkError'){
console.log('There was a network error.');
}
Я не верю, что Ошибка является экземпляром NetworkError
, но брошена таким образом:
throw {
name: 'NetworkError',
message: 'A network error occurred.'
// etc...
}
Ответ 2
Я нашел этот ответ, когда искал способ проверить Network Error
полученную при использовании Axios, поэтому, если вы не используете Axios, этот ответ, вероятно, не для вас.
Объект ошибки, который я получаю через Axios, имеет атрибуты config
, request
и response
, а request
и response
имеют атрибут status
. Атрибут объекта response
отображается на изображении ниже:
![error.response object from Axios]()
Моя конфигурация axios выглядит так:
this.client = axios.create(options);
this.client.interceptors.response.use(this.handleSuccessResponse, this.handleErrorResponse);
this.unauthorizedCallback = () => {};
и метод handleErrorResponse
:
handleErrorResponse(error) {
// use the information from the error object here
}
Ответ 3
Просмотрите событие onreadystatechange. Вы можете получить статус ответа.
Ответ 4
exception.name
возвращает "Error" даже при сетевых ошибках
лучшим способом может быть проверка, если ошибка имеет конфигурацию URL, как это:
if(exception.config && exception.config.url){
// network error
} else {
// other errors
}