← [ BACK_TO_NOTES ]

Axios 取消请求

Axios 的现代取消方式是 AbortController;旧的 CancelToken 已废弃。

#concept #growing #network #browser #http #javascript #axios

[!info] related notes

Axios 取消请求

一句话定义

Axios 通过 AbortController 的 signal 取消请求;老的 CancelToken 已经不建议新项目使用。

[!note] 边界 AbortController / AbortSignal 的通用取消协议以 AbortController 与异步取消 为 canonical;本文只记录 Axios 如何接入该协议,以及 Axios 自身的取消错误与旧 CancelToken 兼容边界。

核心内容

推荐写法

const controller = new AbortController()

const request = axios.get('/users', { signal: controller.signal })
  .catch(error => {
    if (axios.isCancel(error)) return; // 预期取消
    throw error;
  })

controller.abort()
await request // 非取消错误继续向调用方传播

取消和超时不是一回事

  • timeout 的覆盖阶段取决于 adapter 与运行环境,不应直接当作整个业务流程的截止时间。
  • signal 可由主动取消或超时信号触发;需要时组合两者。取消后的 signal 不可复用为新的未取消请求。

常见场景

  • 搜索框连续输入时取消旧请求;仍需用请求序号等方式阻止已完成的旧响应覆盖新状态
  • 路由切换时取消旧请求
  • 组件卸载时终止飞行中的请求
  • 上传/下载中断

边界与易混淆点

  • CancelToken 自 Axios 0.22.0 起被弃用,不代表所有已发布版本都已删除此 API
  • Axios 取消通常表现为 CanceledError / ERR_CANCELED,不要只判断原生 AbortError
  • 客户端取消不证明服务器任务已经停止,也不回滚已发生的写入
  • 取消请求后应该把异常路径也纳入统一错误处理
  • timeout 和 abort 往往要一起考虑

最短记忆方式

  • 新方案:AbortController
  • 旧方案:CancelToken
  • 取消用于主动中断,请别和超时混为一谈

参考

创建于 2026/4/7 更新于 2026/10/6
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本