用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);
            }
          });
        });
      };
相关推荐
星晨雪海15 分钟前
怎么格式化idea中的vue文件
前端·vue.js·intellij-idea
没事多睡觉66621 分钟前
Vue 虚拟列表实现方案详解:三种方法的完整对比与实践
前端·javascript·vue.js
white-persist32 分钟前
Burp Suite模拟器抓包全攻略
前端·网络·安全·web安全·notepad++·原型模式
ObjectX前端实验室1 小时前
【前端工程化】脚手架篇 - 模板引擎 & 动态依赖管理脚手架
前端
GISer_Jing1 小时前
前端GIS篇——WebGIS、WebGL、Java后端篇
java·前端·webgl
excel1 小时前
Vue3 EffectScope 源码解析与理解
前端·javascript·面试
细节控菜鸡1 小时前
【2025最新】ArcGIS for JS 实现地图卷帘效果
开发语言·javascript·arcgis
不老刘2 小时前
Base UI:一款极简主义的「无样式」组件库
前端·ui
祈祷苍天赐我java之术2 小时前
Redis 有序集合解析
java·前端·windows·redis·缓存·bootstrap·html
ObjectX前端实验室3 小时前
【react18原理探究实践】React Effect List 构建与 Commit 阶段详解
前端·react.js