在vue里取消axios的请求
2021/10/25 vueaxios
一、搬砖遇到的问题在搬砖的时候,遇到了一个问题,公共组件 A 是需要传一个数组进去渲染,在 tab1 下面是需要从接口请求返回的数据渲染,在 tab2 下则是读取配置文件的内容。在网络比较慢的情况下,快速从 tab2 切换到 tab1 再切换回 tab2 的时候,会先渲染tab2 从配置文件中读取数组,然后再渲染成 tab1 请求回来的数据列表,然后就不再变化了。
二、如此就需要在切换到 tab2 之前,把 tab1 的请求给取消了。
三、具体的方法:
取消单个请求的方法,可以像下面的方法,把 CancelToken 的 source 放在 data 里,初始化组件的时候,可以赋值,要取消请求的时候,就直接 source.cancel 就可以了。
import axios from 'axios';
export default {
data: () => ({
source: null,
}),
mounted() {
this.source = axios.CancelToken.source();
},
methods: {
async getList() {
const { data, code } = await axios.get('/XXXX/XXXX/', {
cancelToken: this.source.token,
});
},
changeTab() {
this.source.cancel('change tab');
},
},
};
取消多个请求,可以把 CancelToken 取出来,每个请求都重新 new 一个 cancelToken,并把每个 cancelToken 放到 一个公共数组里,在需要所有的请求都中断时,就遍历数组,每个都执行一遍。在请求完成的时候,要在数组中去掉对应的 cancelToken,在页面或者数组卸载的时候,记得清空数组。