用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);
            }
          });
        });
      };
相关推荐
Peter-Code几秒前
Nginx 常用操作整理(前端)
服务器·前端·nginx
半个落月9 小时前
LangSmith 全链路观测(下):用 Dataset 与 LLM Judge 量化评估 RA
javascript·langchain
半个落月9 小时前
LangSmith 全链路观测(上):用 LangGraph 与 Milvus 构建可追踪的 RAG 客服
javascript·langchain
Java后端的Ai之路10 小时前
06-React-Props
前端·react.js·前端框架
半个落月10 小时前
LangChain.js Agent 中间件实战:生命周期、动态工具与文件权限
javascript·langchain
Flynt10 小时前
开源"间谍卫星"说数据全是真的,我把它的免key数据源挨个试了一遍
前端·开源·数据可视化
Csvn11 小时前
渲染管线
前端
程序员大阳11 小时前
副队长CSS教程(33)–圆角与透明
前端·css·透明·圆角
志尊宝11 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
鬼手点金12 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github