1. ホーム
  2. javascript

[解決済み] アクシオスライブラリのタイムアウト機能が動作しない

2022-03-07 21:17:50

質問

を設定しました。 axios.defaults.timeout = 1000;

APIを提供してくれているサーバーを停止しました。

しかし、リクエストを送信してからタイムアウトするまでに1秒以上かかります。

私のリクエストはこのような感じです。

import axios from 'axios';
axios.defaults.timeout = 1000;

return axios.post(`${ROOT_URL}/login/${role}`, creds).then((response) => {
      console.log(response);

        if(response.status === 200) {
          // If login was successful, set the token in local storage
          localStorage.setItem(`${role}_log_toks`, JSON.stringify(response.data));

          // Dispatch the success action
          dispatch(receiveLogin(response.data));

          return response;
        }
      }).catch(err => {
        console.log(err);
        // If there was a problem, we want to
        // dispatch the error condition
        if(err.data && err.status === 404) {
          dispatch(loginError(err.data));
        } else {
          dispatch(loginError('Please check your network connection and try again.'));
        }

        return err;
      });

も試しました。

return axios.post(`${ROOT_URL}/login/${role}`, creds, {timeout: 1000}).then...

Axiosの取得が止まらず、5~10分後にようやくネットワークエラーが表示されます。タイムアウトを処理する他のテクニックがあることは理解していますが、なぜaxiosのタイムアウト機能は動作しないのでしょうか?axiosがフェッチを停止しない理由は何でしょうか?

アクシオスバージョン0.9.1

EDITです。 コメントにもあるように、私も試してみました。

import axios from 'axios';

const httpClient = axios.create();

httpClient.defaults.timeout = 500;

return httpClient.post(`${ROOT_URL}/login/${role}`, creds)
  .then(handleResponse)

解決方法は?

ここから アクシオス問題 (ありがとうございます zhuyifan2013 が解決策を与えてくれた)、私は、このような アクシオス timeout 応答タイムアウト ではない 接続タイムアウト .

を通してURLをリクエストしたとします。 アクシオス で、サーバーが応答するのに時間がかかっている場合、この場合は アクシオス のタイムアウトが機能します。

しかし、インターネットに接続していない、または要求しているIPアドレスやドメイン名が存在しない場合、この場合 アクシオス のタイムアウトは機能しません。

次のコードを使用する必要があります。

  const source = CancelToken.source();
  const timeout = setTimeout(() => {
    source.cancel();
    // Timeout Logic
  }, 10000);
  
  axios.get(ip + '/config', {cancelToken: source.token}).then((result) => {
    // Clear The Timeout
    clearTimeout(timeout);

    // Handle your response
  });

有効な接続がある場合、まだ タイムアウトロジック ブロックが実行されます。そのため timeout .