You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化带Token预请求的Axios数据请求代码?

简化后的Axios实现方案

可以通过提取重复逻辑、使用async/await扁平化异步代码来大幅简化这段代码,同时补上缺失的错误处理:

// 提取重复的请求数据逻辑到独立函数
const fetchOutlets = async (limit, offset, filter) => {
  const res = await axios.post(`${BASE_URL}/json/em/pos/poses`, {
    limit,
    offset,
    contractType: 0,
    ...filter,
  });
  dispatch(reducerGetOutlets({ data: res.data, limit, offset: 0 }));
};

// 统一处理Token与请求流程
const getOutletsWithAuth = async (limit, offset, filter) => {
  try {
    let token = localStorage.getItem('token');
    // 如果没有Token,先请求获取并存储
    if (!token) {
      const tokenRes = await axios(`${process.env.REACT_APP_BASE_URL}/api/user/info`);
      token = `Basic ${tokenRes.data.token}`;
      localStorage.setItem('token', token);
    }
    // 设置全局Authorization头
    axios.defaults.headers.common['Authorization'] = token;
    // 调用提取好的请求函数
    await fetchOutlets(limit, offset, filter);
  } catch (err) {
    // 这里可以添加错误处理逻辑,比如清除失效Token、提示用户等
    console.error('请求失败:', err);
    localStorage.removeItem('token'); // 若Token失效,清空缓存
  }
};

// 调用执行
getOutletsWithAuth(limit, offset, filter);

优化点说明:

  • 消除代码冗余:把重复的post请求逻辑抽成独立函数fetchOutlets,避免在两个分支里重复写相同代码
  • 扁平化异步流程:用async/await替代嵌套的then,让异步代码的执行顺序更直观,可读性更强
  • 统一Token逻辑:将Token的获取、存储、设置头的逻辑集中到一处,后续修改只需调整这部分代码
  • 增加错误处理:添加try/catch捕获请求异常,还能在Token失效时清空本地缓存,避免后续请求用无效Token

内容的提问来源于stack exchange,提问作者Стас Рябцев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:00:28