Retry Ax ios POST-запросов с таймаутом для каждой попытки повтора - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть сценарий использования, в котором мне нужно повторить запрос Ax ios 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);

}); 

1 Ответ

0 голосов
/ 10 февраля 2020

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 или выше.

...