例:切换官方时正在loading改为切换HASH
这是一个典型左侧切换tab,右侧内容区根据tab切换刷新请求数据,当我们切换tab内容正在loading中再次切换其他tab就会导致数据紊乱
初步解决以为是第二个接口比第一个快导致,所以我写了一个任务队列
// 创建搜索请求队列
const Queue = [];
// 队列中的搜索请求处理函数
export const processQueue = ()=> {
if (Queue.length > 0) {
const Request = Queue[Queue.length - 1]; // 取出队列中最后一个搜索请求
console.log(Request);
Request()
.then(() => {
// 搜索请求成功后继续处理下一个搜索请求
Queue.pop();
processQueue();
})
.catch(() => {
// 处理搜索请求失败的情况
});
}
};
// 添加搜索请求到队列
export const addToQueue = (Request) =>{
Queue.push(Request);
if (Queue.length === 1) {
// 如果当前队列为空,则开始处理队列
processQueue();
}
};
// 在搜索框输入时调用的函数
export const queueRequest = (asyncFun) =>{
// 定义搜索请求函数并添加到队列
const Request = asyncFun;
addToQueue(Request);
};
当我们试用queueRequest 函数连续调取接口时,第一个接口完成才回去执行第二个接口,但是bug依在。
网上还有一种方法就是要修改底层axios去解决,这种方法不顺我心,所以没去做。
最后解决方法还是我把问题想的太复杂了,在接口函数中增加tab的校准再赋值
//切换tab
handleChangeTab (tab) {
this.currentTab = tab;
this.getList();
},
async getList () {
//增加tab标识
const tab = this.currentTab;
const params = {
xx:xx
};
this.loading = true;
try {
const result = await this.$api.xxxx(params)
if (result.status == 10000) {
// fix: 避免快速点击照成界面数据错误
if (this.currentTab === tab) {
this.listData = result.data;
}
}
} catch (error) {
return [];
} finally {
if (this.currentTab === tab) {
this.loading = false;
}
}
},