Axios 中断请求(AbortController、CancelToken)

embedded/2024/9/22 21:34:30/

1. 使用 AbortController

  • AbortControllerWeb API 的一部分,可以用来中止一个或多个 fetch 请求
  • 虽然 Axios 默认 不支持 直接使用 AbortController,但你可以通过传递 AbortController 的 signal 属性到 Axios请求 中来实现这一功能
  • 对于循环请求,你需要 为每个请求创建一个新的 AbortController 实例,并在合适的时机调用 abort 方法。

const controller = new AbortController();
const { signal } = controller;// 在你的请求中传递 signal
axios.get('/your-endpoint', { signal }).then(response => {// 处理响应
});// 当需要中止请求时
controller.abort();

实例:如果有相同请求,先中断前一个

const api = axios.create({baseURL: import.meta.env.VITE_APP_API_BASEURL,timeout: 1000 * 60,
})const pendingMap = new Map() // abort 取消重复请求function removePending(config: AxiosRequestConfig) {const key = `${config.method}:${config.url}:${JSON.stringify(filterNullUndefined(config.params || config.data))}`const abort = pendingMap.get(key)if (abort) {abort('cancel')pendingMap.delete(key)}
}// axios实例拦截请求
api.interceptors.request.use((config) => {// 如果有相同请求,先中断前一个removePending(config)const abortController = new AbortController()config.signal = abortController.signalpendingMap.set(`${config.method}:${config.url}:${JSON.stringify(filterNullUndefined(config.params || config.data))}`,() => abortController.abort('cancel'),)return config},(error) => {return Promise.reject(error)},
)

2. 使用 Axios 的 CancelToken

  • Axios 提供了 CancelToken 功能,可以用来取消请求。你可以创建一个 CancelToken 实例,并在请求中传递它
  • 对于循环请求,你同样需要 为每个请求创建一个新的 CancelToken 实例,并保存每个请求的 取消函数
import axios from 'axios'
const CancelToken = axios.CancelToken
let cancelaxios.get('/your-endpoint', {cancelToken: new CancelToken((c) => {// 保存取消函数cancel = c}),
}).then((response) => {// 处理响应
})// 当你需要取消请求时
cancel()

实例:离开页面前中断循环请求

const cancel = reactive<any>({})// 单个请求体,i为索引
function singleChunk(i: number) {const dId = dataId.valueconst p = () => {return new Promise((resolve, reject) => {chunkDownload({id: dId,chunk: i + 1,}, {cancelToken: new CancelToken((c) => {// 保存取消函数cancel[i + 1] = c}),}).then((info) => {// ....}).catch((err) => {reject(err)})})}return p
}// ......................................// 页面销毁前
onBeforeUnmount(() => {// 终止请求for (const key in cancel) {if (typeof (cancel[key] === 'function')) {cancel[key]()}}
})

http://www.ppmy.cn/embedded/96644.html

相关文章

C#身份核验接口-身份证查询接口-身份证实名制API

随着互联网技术的不断普及&#xff0c;互联网应用层出不穷&#xff0c;网络支付更加便捷了人们的工作与生活&#xff0c;每一笔交易的背后都是建立在信任的基石上&#xff0c;而这信任的来源&#xff0c;基于身份证实名认证接口功能&#xff0c;而如何让自己的应用实现实名认证…

Android常用控件Button

文章目录 Android常用控件Button两种方式实现点击事件的监听使用匿名类的方式使用实现接口的方式 Android控件的可见属性 Android常用控件Button Button是程序用于和用户进行交互的一个重要控件&#xff0c;相信你对这个控件已经非常熟悉了&#xff0c;因为我们用了太多次Butt…

NPM包管理高级技巧:使用版本范围测试锁定

引言 在JavaScript项目开发中&#xff0c;依赖管理是保证项目稳定性和可维护性的关键环节。NPM&#xff08;Node Package Manager&#xff09;作为Node.js的包管理器&#xff0c;提供了一套灵活的版本控制机制&#xff0c;允许开发者精确控制依赖包的版本。版本范围测试锁定是…

第八章 指定自定义 HTTP 请求

文章目录 第八章 指定自定义 HTTP 请求自定义 Web 客户端的回调%OnSOAPRequest()%OnSOAPFinished() 第八章 指定自定义 HTTP 请求 默认情况下&#xff0c;Web 客户端使用 HTTP 将 SOAP 消息传输到 Web 服务并接收响应。Web 客户端会自动创建并发送 HTTP 请求&#xff0c;但可以…

车辆车载客流统计系统解决方案

车辆车载客流统计系统是一种用于实时监测和分析乘客流量的技术解决方案&#xff0c;它可以帮助公交公司、地铁运营商等交通管理部门优化运营计划、提高服务效率和乘客满意度。以下是一个详细的车载客流统计系统解决方案&#xff1a; 一、系统组成 传感器与设备 摄像头&#xf…

第100+21步 ChatGPT学习:概率校准 Isotonic Regression

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

基于UDP的网络聊天室

项目需求&#xff1a; 如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息如果有人下线&#xff0c;其他用户可以收到这个人的下线信息服务器可以发送系统信息 server.c #include <myhead.h> s…

大模型微调--文章1

原文地址 链接&#xff1a;https://zhuanlan.zhihu.com/p/635152813 思考题 问题1&#xff1a;self attention对于计算的并行性体现在哪里&#xff1f;&#xff08;解决&#xff09; 答案&#xff1a; 1.矩阵运算的并行性 2.多头注意力的并行性 3.无序列依赖性&#xff08;写…