用Promise实现ajax的自动重试

有时候遇到网络错误,希望可以多试几次,可以利用Promise递归调用实现

以若依系统的登出举例

javascript 复制代码
export function logout() {
  return request({
    url: '/logout',
    method: 'post'
  })
}

修改下原本的登出逻辑,遇到ERR_NETWORK错误,也就是网络问题,每隔1秒重试一次

javascript 复制代码
    LogOut({ commit, state }) {
      const MAX_RETRIES = 3;
      let retries = 0;
    
      const attemptLogout = () => {
        return new Promise((resolve, reject) => {
          logout().then(() => {
            commit('SET_TOKEN', '');
            commit('SET_ROLES', []);
            commit('SET_PERMISSIONS', []);
            removeToken();
            resolve();
          }).catch(error => {
            if (error.code === 'ERR_NETWORK' && retries < MAX_RETRIES) {
              retries++;
              console.error(`网络错误,正在重试(第 ${retries}/${MAX_RETRIES} 次尝试)...`, error);
              setTimeout(() => {
                attemptLogout().then(resolve).catch(reject);
              }, 1000); // 等待 1 秒后重试
            } else {
              console.error('退出登录时发生错误:', error);
              reject(error);
            }
          });
        });
      };
相关推荐
江城开朗的豌豆12 分钟前
Vue组件CSS防污染指南:让你的样式乖乖“宅”在自家地盘!
前端·javascript·vue.js
江城开朗的豌豆23 分钟前
Vue组件花式传值:祖孙组件如何愉快地聊天?
前端·javascript·vue.js
浩男孩1 小时前
【🍀新鲜出炉 】十个 “如何”从零搭建 Nuxt3 项目
前端·vue.js·nuxt.js
拉不动的猪2 小时前
pc和移动页面切换的两种基本方案对比
前端·javascript·vue.js
Hilaku2 小时前
前端日志调试也能专业化?我们这样设计日志系统
前端·javascript
李杰同志891632 小时前
iOS moya 实现双token 刷新并重试
前端
花果山总钻风2 小时前
Debian 编译安装 ruby3.2
前端·javascript·debian
前端小巷子2 小时前
跨标签页通信(五):IndexedDB
前端·面试·浏览器
LaoZhangAI2 小时前
2025全面评测:Flux AI图像生成器6大模型全解析【专业测评】
前端·后端
PioneerWang2 小时前
useContext及其原理解析
前端