前端请求重试机制怎么避免无限循环?

Zz赛赛 阅读 4

我在做接口请求失败自动重试的功能,但有时候网络一直不好,重试就停不下来,页面直接卡死。我试过加个计数器限制重试3次,但代码写得有点乱,不确定是不是最佳实践。

比如现在用的是 fetch 封装的请求函数,重试逻辑写在 Promise 的 .catch() 里,但感觉控制不住递归深度。有没有更稳妥的方式?

const requestWithRetry = (url, retries = 3) => {
  return fetch(url).catch(err => {
    if (retries > 0) {
      return requestWithRetry(url, retries - 1);
    }
    throw err;
  });
};
我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
Mr.巧梅
Mr.巧梅 Lv1
问题在于递归调用没有处理 resolve 情况。改用 async/await 和 for 循环更清晰。
const requestWithRetry = async (url, retries = 3) => {
for (let i = 0; i < retries; i++) {
try {
return await fetch(url);
} catch (err) {
if (i === retries - 1) throw err;
}
}
};
点赞
2026-03-22 19:02