【问题标题】:How to do retry on status 200 using axios-retry如何使用 axios-retry 重试状态 200
【发布时间】:2019-03-19 18:58:08
【问题描述】:

我正在使用axios-retry 我正在尝试它会在响应条件而不是响应状态上重试。 我的状态是 200 我认为因为它不会重试, 我的代码是

        raxConfig: {
                retry: retry,
                retryDelay: retryDelay,
                httpMethodsToRetry: ["GET"],
                 statusCodesToRetry: [
                     [200, 300]

                 ],
                shouldRetry: (err) => {
                    const cfg = rax.getConfig(err);
                    if (cfg.data.isFinal == true) {
                        return false
                    } else {
                        return true;
                    }
                }

【问题讨论】:

  • 如果响应不满足某些条件,您可以添加响应拦截器并抛出错误。 github.com/axios/axios#interceptors
  • 我可以用npmjs.com/package/retry-axios把这个函数放在哪里
  • retry-axiosaxios 下的包装器。 interceptors - 是axios 的一部分。将响应拦截器添加到您在代码中使用的 axios 实例,然后在拦截器中抛出错误,如果响应看起来无效,retry-axios 会自动捕获错误并尝试重新发送请求
  • 我添加了这个,但问题是我确实返回了 Promise.reject(error);但后来它不做重试它会赶上
  • 请您提供完整的代码作为答案,谢谢

标签: javascript axios axios-retry


【解决方案1】:
static async event( retry = 5, retryDelay = 10000) {
    //default retryDelay 10 sec
    const restURL ='www.sdfdsfds.sdfds'
    for (let i = 0; i < retry; i++) {
      const response = await this.rest(restURL);
      if (
        response.status == 200 

      ) {
        return response.data;
      }
      await this.delay(retryDelay);
    }
    return Promise.reject(new Error(400));
  }



static delay(milisec = 10000) {
    return new Promise(resolve => {
      setTimeout(() => {
        resolve("resolved");
      }, milisec);
    });

}

【讨论】:

    【解决方案2】:

    我尝试使用 axios 拦截器抛出 500,然后我配置了 axios-retry...但是很快就变得丑陋了...

    我最终这样做了

    if (retry) {
        const MAX = 5;
        let tried = 0;
        do {
            response = await axios.get(url, { ...options });
            console.warn('try# ', tried++, response.data);
            await delay(1000);
        } while (response.data.ok !== 1 && tried < MAX);
    } else {
        response = await axios.get(url, { ...options });
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2017-07-12
      • 2019-09-15
      • 1970-01-01
      • 2022-01-22
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多