当前位置: 首页 > news >正文

用Promise实现ajax的自动重试

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

以若依系统的登出举例

export function logout() {
  return request({
    url: '/logout',
    method: 'post'
  })
}

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

    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);
            }
          });
        });
      };

相关文章:

  • 【uniapp】记录tabBar不显示踩坑记录
  • 大数据学习(75)-大数据组件总结
  • S32K144外设实验(三):ADC单通道连续采样(中断)
  • Android第五次面试总结(网络篇)
  • Linux上位机开发实战(camera视频读取)
  • 【DeepSeek 学C+】effective modern c+ 条款七 初始化
  • 【c++】【STL】unordered_set 底层实现(简略版)
  • k8s 配置imagePullSecrets仓库认证
  • SpringMVC全局异常处理机制
  • Android SDK下载安装配置
  • 多无人车协同探索开源包启动文件介绍(下)
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(10)
  • LVGL和其他图形库区别于联系
  • Spring Boot Actuator 自定义健康检查(附Demo)
  • AI安全、大模型安全研究(DeepSeek)
  • 3. 轴指令(omron 机器自动化控制器)——>MC_SetPosition
  • Python(数据结构概念,算法时间效率衡量,链表)
  • Oracle GoldenGate (OGG) 安装、使用及常见故障处理
  • 英伟达黄仁勋2025GTC演讲深度解析:液冷GPU、AI工厂、机器人AI…...
  • 【NoC仿真器(nirgam noxim)搭建】自用笔记
  • 构筑高地共伴成长,第六届上海创新创业青年50人论坛在沪举行
  • 河北邯郸一酒店婚宴发生火灾:众人惊险逃生,酒店未买保险
  • 夜读丨喜马拉雅山的背夫
  • “80后”赵亮出任上海普陀区委副书记
  • 市自规局公告收回新校区建设用地,宿迁学院:需变更建设主体
  • 习近平同瑞典国王卡尔十六世·古斯塔夫就中瑞建交75周年互致贺电