vue 请求竞态 中断请求 解决切换表格数据,数据发生错乱


//1,声明缓存请求的集合
const pendingRequest = new Map();
//2,请求url和method生成key
const generateRequestKey = <T extends AxiosRequestConfig>(config: T) => {
	const { method, url } = config
	return [method, url].join("&")
}
//3,缓存正在pending状态的请求
const addPendingRequest = (config: AxiosRequestConfig) => {
	const requestKey = generateRequestKey(config)
	// 判断是否正在pending中
	if (pendingRequest.has(requestKey)) {
		const controller = pendingRequest.get(requestKey)
		//终止请求
		controller.abort()
		pendingRequest.delete(requestKey)
	}
	// 添加请求
	const controller = new AbortController()
	config.signal = controller.signal
	pendingRequest.set(requestKey, controller)
}
// 4,删除缓存的请求
const removePendingRequest = (config: AxiosRequestConfig) => {
	const requestKey = generateRequestKey(config)
	if (pendingRequest.has(requestKey)) {
		pendingRequest.delete(requestKey)
	}
}

在请求拦截器里添加

// 添加请求拦截器
service.interceptors.request.use((config) => {
	addPendingRequest(config)
	// 在发送请求之前做些什么
	return config;
}, function (error) {
	// 对请求错误做些什么
	return Promise.reject(error);
});

在响应拦截器里移除

// 添加响应拦截器
service.interceptors.response.use((response: any) => {
	removePendingRequest(response.config)
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vue1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值