Axios 라이브러리의 시간 초과 기능이 작동하지 않습니다.
세팅했습니다.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의 타임아웃 기능이 동작하지 않는 것입니까?왜 공리들이 꺼내는 것을 멈추지 않는 걸까요?
편집: 코멘트에도 기재되어 있듯이, 다음과 같이 시도하고 있습니다.
import axios from 'axios';
const httpClient = axios.create();
httpClient.defaults.timeout = 500;
return httpClient.post(`${ROOT_URL}/login/${role}`, creds)
.then(handleResponse)
(해결책을 준 zuyifan2013 덕분에) 이번 호에서 저는 이 점을 발견했습니다. timeout
접속 타임아웃이 아닌 응답 타임아웃입니다.
예를 들어, URL을 Axios를 통해 요청했는데 서버가 응답하는 데 시간이 오래 걸린다고 가정해 봅시다.이 경우 Axios 타임아웃이 작동합니다.
단, 인터넷 접속이 없거나 요청하신 IP 주소 또는 도메인 이름이 없습니다.이 경우 Axios 타임아웃은 기능하지 않습니다.
axios 취소 방법 중 하나를 사용해야 합니다.cancelToken
예:
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 Logic 블록이 실행됩니다.그러니까 넌 이 모든 것들을timeout
.
이 코드는 유효합니다.
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 block에 들어갑니다.
이것도 도움이 됩니다#1503
actios http 클라이언트의 인스턴스를 작성해야 합니다.
const httpClient = axios.create();
httpClient.defaults.timeout = 500;
다음으로 httpClient를 다음과 같이 사용할 수 있습니다.
return httpClient.post(`${ROOT_URL}/login/${role}`, creds)
.then(handleResponse)
또, 를 사용하는 대신에, 같은 설정으로 베이스 URL 를 설정할 수도 있습니다.${ROOT_URL}
:
httpClient.defaults.baseURL = ROOT_URL
@arthankamal에게 외치는 것은 그의 답변이 해결책이고 이것은 업데이트와 후속 조치일 뿐이기 때문입니다.
CancelToken은 v0.22.0에서 권장되지 않습니다.이는 AbortController로 전환되었기 때문에 CancelToken의 코드를 업데이트했습니다.자세한 것은, https://axios-http.com/docs/cancellation 를 참조해 주세요.
TrySending(data) {
let abortController = new AbortController()
const timeout = setTimeout(() => {
abortController.abort()
console.log("Aborted")
}, 3000)
return axios
.post(
apiURL,
data,
{ signal: abortController.signal }
)
.then(response => {
clearTimeout(timeout)
return true
})
.catch(error => false)
}
성공했는지 실패했는지 여부가 반환됩니다.
주의사항:
- 이 기능을 사용할 수 없기 때문에 최종적으로 사용할 필요가 없습니다.
- 취소된 경우 .catch()로 바로 이동하며 오류는 다음과 같습니다.
{ message: 'canceled' }
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
}
}
최신 버전의 노드가 필요할 수도 있습니다.타임아웃은 14.14.0으로 수정되었습니다.https://github.com/nodejs/node/pull/34913
타임아웃을 입니다.requestTimeout
에러가 : 이 , 「」를 사용합니다.async
/await
.
import axios from 'axios';
const requestTimeout = 2000; // how long to wait in case axios never connects
axios.defaults.timeout = 1000; // how long axios should wait for a response
async function axiosWithTimeout (options) {
let reqTimeout; // make request timeout object available to both try and catch blocks
try {
const controller = new AbortController();
const signal = controller.signal;
reqTimeout = setTimeout(() => controller.abort(), requestTimeout);
const response = await axios({ signal, ...options });
clearTimeout(reqTimeout); // we have an response, clear timeout
return response;
} catch (error) {
clearTimeout(reqTimeout); // we have an error, clear timeout
return error;
}
}
axiosWithTimeout({
// method, url, headers, params, etc for axios request
});
언급URL : https://stackoverflow.com/questions/36690451/timeout-feature-in-the-axios-library-is-not-working
'programing' 카테고리의 다른 글
jQuery를 사용하여 교차 도메인 Ajax JSONP 요청 만들기 (0) | 2023.04.03 |
---|---|
기능 컴포넌트 기본 소품 vs 기본 파라미터 (0) | 2023.04.03 |
WooCommerce 주문에서 쿠폰 데이터 가져오기 (0) | 2023.04.03 |
AngularJS + OAuth (0) | 2023.04.03 |
jq를 사용하여 JSON의 2개 필드를 구성합니다. (0) | 2023.04.03 |