首页 > 解决方案 > 每次重试都超时重试 Axios POST 请求

问题描述

我有一个用例,如果出现任何错误,我需要重试 Axios 请求 3 次,如果在 3 秒内没有得到任何响应,则每次重试尝试应该在 3 秒内超时。下面是我正在使用的代码。它重试 3 次,但每次重试都不会超时。如何使每次重试尝试超时?任何代码片段都会有所帮助。

const axiosRetry = require('axios-retry');
axiosRetry(axios, { retries: 3 });

axios.post(url,payload,{headers:header})
 .then((response) =>{
    console.log('Response is *****'+JSON.stringify(response));

})
.catch((err) =>{
    console.log('Error occurred'+err);

}); 

标签: node.jsaxiosaxios-retry

解决方案


1)我没有看到你timeout在代码中的任何地方设置为 3 秒。

2)默认情况下,axios-retry将请求超时解释为全局值,因此如果您需要在每次重试 3 秒后超时,请设置shouldResetTimeout: true.

3) 默认情况下,axios-retry不重试超时请求(即带有ECONNABORTED代码的请求)和非幂等请求(如POST. 设置一个自定义retryCondition来改变它。

鉴于上述几点,这样的事情应该有效:

const axios = require('axios').default;
const axiosRetry = require('axios-retry');
axiosRetry(axios, {
  retries: 3,
  shouldResetTimeout: true,
  retryCondition: (_error) => true // retry no matter what
});

axios.post(url, payload, {headers: header, timeout: 3000})
  .then((res) => {
    console.log('Response is *****', res);

  })
  .catch((err) => {
    console.log('Error occurred' + err);
  });

另外,请务必使用axios@0.19.1或以上。


推荐阅读