主题
取消请求(CancelToken 与 AbortController)
在实际项目中,有时需要取消正在进行的请求,例如用户快速切换页面或重复触发搜索请求。Axios 提供两种方式来实现请求取消。
1. 使用 CancelToken(Axios v0.22 及之前版本)
javascript
import axios from "axios";
const CancelToken = axios.CancelToken;
let cancel;
// 发送请求
axios
.get("/users/123", {
cancelToken: new CancelToken(function executor(c) {
cancel = c;
}),
})
.then((res) => console.log(res.data))
.catch((err) => {
if (axios.isCancel(err)) {
console.log("请求被取消:", err.message);
} else {
console.error("请求失败:", err);
}
});
// 取消请求
cancel("用户主动取消请求");2. 使用 AbortController(现代浏览器推荐)
javascript
const controller = new AbortController();
const signal = controller.signal;
// 发送请求
axios
.get("/users/123", { signal })
.then((res) => console.log(res.data))
.catch((err) => {
if (err.name === "CanceledError") {
console.log("请求被取消");
} else {
console.error("请求失败:", err);
}
});
// 取消请求
controller.abort();3. 优势
- 提升性能:取消不必要的请求,减少服务器负载和流量消耗;
- 提升体验:避免用户切换页面或搜索时显示过期数据;
- 兼容性:AbortController 现代浏览器支持良好,CancelToken 可兼容旧版本 Axios。
💡 小提示:在长列表搜索或表单联动请求场景中,结合请求取消机制可以显著优化性能和用户体验。