我想使用axios重试5xx请求。我的主请求在try catch块中间。我使用axios-retry库自动重试3次。
我正在使用的url会故意抛出一个503。然而,请求没有被重试,而是被我的catch块捕获。
axiosRetry(axios, {
retries: 3
});
let result;
const url = "https://httpstat.us/503";
const requestOptions = {
url,
method: "get",
headers: {
},
data: {},
};
try {
result = await axios(requestOptions);
} catch (err) {
throw new Error("Failed to retry")
}
}
return result;
8条答案
按热度按时间8i9zcol21#
axios-retry使用axios拦截器来重试HTTP请求。它在then或catch处理请求或响应之前拦截它们。下面是工作代码片段。
vwoqyblh2#
使用retry
brjng4g33#
你可以用
axios.interceptors.response.use
来做这个。当你遇到错误的时候,你可以用resolve
递归返回axios
请求。然后你可以自己定义条件,每当你想重试的时候。这是一个简单的axios重试版本,这也是axios-retry做的概念。我还做了一个演示版本来模拟最后一个请求是成功的,但是前面的请求全部失败.我定义了status_code:404我想重试,并设置3次重试。
您将看到以下日志打印消息。
frebpwbc4#
您可以使用
axios
拦截器来拦截响应并重试请求。您可以在
then
或catch
处理请求或响应之前将其截获。请参阅axios拦截器
有两个流行的包已经利用
axios
拦截器来实现这一点:这里有一个NPM compare链接,可以帮助您在这两者之间做出选择
ef1yzkbh5#
正在更新Andrien应答以防止进程泄漏。我们应该在请求成功后停止循环,但忘记了添加增量,因此这意味着它永远不会停止循环。这将仅在请求失败时重试,最大值为3。您可以根据您的首选值更改
maxRetries
来增加该值。有关更多详细信息,请查看while循环的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/while
ryoqjall6#
被接受的解决方案将强制所有失败的HTTP请求(使用axios)重试。
一个解决方案是为特定的HTTP调用创建一个新的axios示例,并为其定义重试策略:
wixjitnu7#
它使用了Junius L.引用的
retry
库,但我将它 Package 在一个promise中。它将在超时时拒绝,并在成功后解析。s8vozzvw8#
您可以通过不使用其他库来实现此目的。