web-dev-qa-db-ja.com

JavaScriptでNetworkErrorをキャッチする方法は?

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をキャッチするにはどうすればよいですか?

19
Synthead

あなたが言ったのは:

if(exception.name == 'NetworkError'){
   console.log('There was a network error.');
}

エラーがNetworkErrorのインスタンスであるとは思いませんが、次のようにスローされます。

throw {
   name: 'NetworkError',
   message: 'A network error occurred.'
   // etc...
}
14
Rob M.

Axiosの使用中に得たNetwork Errorを調べる方法を探しているときにこの答えを見つけたので、Axiosを使用している場合not、これは答えはおそらくではありません

Axiosを介して受け取るエラーオブジェクトにはconfigrequestresponse属性があり、requestresponseの両方に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
}
2
Aleksandar

onreadystatechange イベントを調べます。応答のステータスを取得できます。

0
NaNpx