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がフェッチを停止しない理由は何でしょうか?
EDIT:コメントで述べたように、私も試しました:
import axios from 'axios';
const httpClient = axios.create();
httpClient.defaults.timeout = 500;
return httpClient.post(`${ROOT_URL}/login/${role}`, creds)
.then(handleResponse)
Axios httpクライアントのインスタンスを作成する必要があります。
const httpClient = axios.create();
httpClient.defaults.timeout = 500;
その後、次のようにhttpClientを使用できます。
return httpClient.post(`${ROOT_URL}/login/${role}`, creds)
.then(handleResponse)
補足として、${ROOT_URL}
を使用する代わりに、同じ構成でベースURLを設定することもできます。
httpClient.defaults.baseURL = ROOT_URL
これから axios issue (ソリューションを提供してくれたzhuyifan2013に感謝)、私はaxiostimeout
isresponse timeoutnot notconnection timeout。
axiosを介してURLをリクエストし、サーバーが応答するのに長い時間がかかっているとしましょう。この場合、 axiosタイムアウトが機能します。
ただし、インターネットに接続していないか、要求していないIPアドレスまたはドメイン名がない場合、この場合axiosタイムアウトは機能しません。
次のコードを使用する必要があります
let source = CancelToken.source();
setTimeout(() => {
source.cancel();
// Timeout Logic
}, 10000);
axios.get(ip + '/config', {cancelToken: source.token}).then((result) => {
// Handle your response
});
接続が有効な場合でも、Timeout Logicブロックが実行されることに注意してください。
このコードは私のために機能します:
axios({
method: "post",
url: 'http://example.com/api',
timeout: 1000 * 5, // Wait for 5 seconds
headers: {
"Content-Type": "application/json"
},
data: {
id: 1234
}
})
.then(response => {
const serverResponse = response.data;
// do sth ...
})
.catch(error => {
console.log(error);
});
サーバーが5秒以内に応答しない場合、catchブロックに入ります。
これも便利です: #15
submitHashtag = async () => {
const data = await axios.post('/pwa/basics.php', {
withCredentials: true,// if user login
timeout: 30000
})
if (!data) {
// action here
alert('reload window')
return
}
}