用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);
            }
          });
        });
      };
相关推荐
筱歌儿44 分钟前
小程序问题(记录版)
前端·小程序
火龙谷1 小时前
【爬虫】码上爬第6题-倚天剑
开发语言·javascript·爬虫
Jinuss1 小时前
源码分析之Leaflet中的LayerGroup
前端·leaflet
赶飞机偏偏下雨2 小时前
【前端笔记】CSS 选择器的常见用法
前端·css·笔记
LuckyLay2 小时前
AI教你学VUE——Deepseek版
前端·javascript·vue.js
我是哈哈hh3 小时前
【Vue】全局事件总线 & TodoList 事件总线
前端·javascript·vue.js·vue3·vue2
liuyang___3 小时前
vue3+ts的watch全解!
前端·javascript·vue.js
我是哈哈hh3 小时前
【Vue】组件自定义事件 & TodoList 自定义事件数据传输
前端·javascript·vue.js·vue3·vue2
牧杉-惊蛰3 小时前
VUE+ElementUI 使用el-input类型type=“number” 时,取消右边的上下箭头
前端·vue.js·elementui
Stella25213 小时前
14前端项目----登录/注册
前端