前端接口失败重试怎么做才不会重复请求?

码农梓怡 阅读 21

我在做用户登录功能,网络不稳定时想加个重试机制,但发现有时候会连续发好几次一样的请求,比如用户点一次登录,结果因为重试发了三次。我试过用 axios 的拦截器加 retry 逻辑,但没控制好并发。

现在用的是这种简单写法:

const request = (url, options) => {
  let retries = 0;
  const maxRetries = 3;
  
  const attempt = () => {
    return fetch(url, options).catch(err => {
      if (retries < maxRetries) {
        retries++;
        return attempt();
      }
      throw err;
    });
  };
  
  return attempt();
};

但这样每次调用 request() 都会新建一个 retry 实例,如果用户快速点击多次,就会同时跑好几个重试流程。有没有办法在组件层面或者请求层面对同一个请求做去重 + 重试?

我来解答 赞 5 收藏
二维码
手机扫码查看
暂无解答

暂无解答