Axiosブロッカーでのtimeoutエラーの処理


この文章もhttps://jinjoopark.notion.site/Axios-interceptors-timeout-763beb16bf0f43048c4d9ecfd9ac5d70で見ることができます.

タイムアウトの設定


axiosリクエストが長くなるとリクエストは中止され、タイムアウト処理を行う場合はリクエスト構成にtimeoutを設定する必要があります.
axiosリクエストでは、timeoutのデフォルトは0(無限大)です.
  • サーバが408(タイムアウト)エラーまたは
  • を送信していない
  • を送信していますが、待ち時間が長く、リクエスト時間を短縮したい場合は
    (サーバにタイムアウト時間の短縮が要求される場合があります)
  • 設定したほうがいいです.
    次のコード例では、interceptors.requestを使用してtimeoutを設定する方法について説明します.
    例は、config.methodの条件を追加し、getメソッドの場合にのみ設定します.
    // axios 인스턴스 생성
    const instance = axios.create({
      baseURL: 'https://api.example.com',
    	headers: {
    		...
    	},
    	// 조건문 없이 모든 요청에 대해 일괄 적용하고 싶다면 인스턴스 생성 시 설정하면 됩니다.
    	// timeout: 5000,
    });
    
    // request가 발생했을 때 실행될 interceptors를 추가
    instance.interceptors.request.use(
    		// config는 요청에 대한 정보가 담긴 객체입니다. 궁금하면 console로 찍어보세요.
        (config) => {
    				// config.method를 조회하여 get 메서드일 때만 timeout을 설정합니다.
            if (config.method === 'get') {
                config.timeout = 12000;
            }
            return config;
        },
        (error) => {
            ...
        },
    );

    タイムアウトエラーの処理


    タイムアウト設定が完了するとaxiosリクエストが長くなると、リクエストは停止し、errorに戻ります.
    なお、codeの値はECONNABORTEDであるため、条件として取り扱うことができる.
    // 응답 인터셉터 추가하기
    axios.interceptors.response.use(function (response) {
        // 2xx 범위에 있는 상태 코드는 이 함수를 트리거 합니다.
        // 응답 데이터가 있는 작업 수행
        return response;
      }, function (error) {
        // 2xx 외의 범위에 있는 상태 코드는 이 함수를 트리거 합니다.
        // 응답 오류가 있는 작업 수행
    
    		const code = error.code;
    		const status = error.response?.status;
    
    		// timeout이 발생한 경우와 서버에서 408 에러를 반환할 때를 동시에 처리하겠습니다.
    		if (code === "ECONNABORTED" || status === 408) {
    			alert("요청이 만료되었습니다.");
    		}
        return Promise.reject(error);
      });
    
    💡 テストが必要な場合はtimeoutを100に設定し、呼び出しを試みます.
    🚨 注意事項
    timeoutエラーが発生すると、error.responseundefinedになります.error.response.statusの値responseのようなブロックからコードが取り出して値が書き込まれた場合、エラーが発生します.
    光学的スクリーニング構文を使用するか、またはerror.responseに対して個別の条件処理を行う必要がある.

    🗃 コメントドキュメント

  • https://axios-http.com/kr/docs/interceptors
  • https://axios-http.com/kr/docs/req_config
  • https://github.com/axios/axios/issues/1174