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

如何使用请求拦截器取消localStorage无token时的网页接口请求?

问题根因

你当前的请求拦截器在检测到无token时仍然返回了完整的请求配置对象,axios收到正常返回的配置后会按照逻辑正常发起请求,自然不会触发取消逻辑。

解决方案

根据你使用的axios版本选择对应的实现方式即可:

方案1:适用于axios v0.22及以上版本(推荐)

使用标准的AbortController终止请求:

instance.interceptors.request.use(async (req) => {
  const token = localStorage.getItem("token") || null;
  console.log(req.url);
  if (!token) {
    console.log("not exist token");
    // 构造终止控制器,直接终止当前请求
    const controller = new AbortController();
    req.signal = controller.signal;
    controller.abort("无有效token,请求已终止");
    return req;
  }
  console.log("token exist");
  req.headers.Authorization = `Bearer ${token}`;
  return req;
}, (error) => {
  return Promise.reject(error);
});

你也可以直接返回拒绝状态的Promise实现相同的效果:

if (!token) {
  console.log("not exist token");
  return Promise.reject(new Error("无有效token,请求已终止"));
}

方案2:适用于旧版本axios

使用axios自带的CancelToken实现取消:

import axios, { CancelToken } from 'axios';

instance.interceptors.request.use(async (req) => {
  const token = localStorage.getItem("token") || null;
  console.log(req.url);
  if (!token) {
    console.log("not exist token");
    const source = CancelToken.source();
    req.cancelToken = source.token;
    source.cancel("无有效token,请求已终止");
    return req;
  }
  console.log("token exist");
  req.headers.Authorization = `Bearer ${token}`;
  return req;
});

补充说明

如果不希望请求取消后抛出未捕获的错误,可以在全局响应拦截器中统一捕获这类取消请求的错误做静默处理,也可以在业务代码调用请求的位置通过try catch主动捕获异常。

内容的提问来源于stack exchange,提问作者yavgz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:11