簡體   English   中英

axios-retry 不適用於狀態為 4XX 的響應

[英]axios-retry is not working for response with status 4XX

我正在使用 axios 撥打 api 電話。 萬一發生故障或響應狀態。= 200 我需要重試 api 調用。 默認重試 axios 適用於 5XX 狀態。 但是根據文檔,我們可以根據我們的要求覆蓋 retryCondition。

這是我的代碼片段

export const doApiFetchCall = (apiEndPoint, dataPayLoad, config, axiosObject, callType,caller,timeoutParam,retryCount) => {
let instance = undefined;
if(axiosObject === 'axios') {
    instance = localAxios;
} else if(axiosObject === 'axiosProxy') {
    instance = localAxiosProxy;
} else if (axiosObject === 'axiosProxyJira') {
    instance = localAxiosProxyJira;
}
let restOptions = {
    url: apiEndPoint,
    method: callType,
    timeout: timeoutParam || 20000, // timeout in ms
    headers:config.headers||null,
    raxConfig: {
        retry: retryCount || 0, // number of retry when facing 4xx or 5xx
        instance: instance,
        retryCondition: () => true,
        onRetryAttempt: err => {
            let tempError = Object.assign({}, err)//{...err}
            const cfg = rax.getConfig(err);
            delete tempError.config;
            delete tempError.request;
        },
        noResponseRetries: 3, // number of retry when facing connection error
        httpMethodsToRetry: ['GET', 'HEAD', 'OPTIONS', 'DELETE', 'PUT', 'POST', 'PATCH'],
        retryDelay: 3000,
        backoffType: 'static'
    }
};

var caller_id = caller||'';
if (dataPayLoad) restOptions = {...restOptions, data: dataPayLoad};

return new Promise((resolve, reject) => {

    instance(restOptions)
        .then(response => {
            logger.info(caller_id, '[API_CALL_SUCCESS] API call has succeeded');
            if (response) {
                const {status, data} = response;
                logger.info(caller_id, '[API_CALL_SUCCESS] API call Status Code: [' + status + ']');

                try {
                    if (status === 200 || status === 201) {
                        resolve(response);
                    } else {
                        reject(null);
                    }
                } catch (jsonParseError) {
                    reject(jsonParseError);
                }
            } else {
                resolve(null);
            }
        })
        .catch(error => {
            const {response, request, message, config} = error;
            reject(error);

});

我已經覆蓋了 retryCondition 我不確定它是否以正確的方式完成。 有人可以讓我知道我做錯了什么嗎?

得到修復。 我超越了 statusCodesToRetry 屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM