前端同一个接口频繁调用,只处理最后一次返回

问题:

在做项目时候发现,一个页面中有多个Tag,每个Tag对应的数据调用的是同一个接口,参数不同,在快送切换Tag时,展示的是前一个请求返回的数据

解决办法:

取消请求。利用Cancel Token或者AbortController,当第二次请求数据接口时,取消第一次的请求。

id查询。每次向后台进行数据请求时带上唯一的id,在渲染时通过id来选择数据进行渲染。

③前端闭包记录每次请求的id,渲染时通过id来选择数据进行渲染。

前两种没来得及研究,使用第三种方案解决

简易实现如下:

const cache = {};
const asyncDebounce = (key) => {
const time = newDate().getTime();
cache[key] = time;
return () => cache[key] === time;
};

使用方法:

function test(p){
// 同一数据接口的key,可以使用url来作为key
const isValid = asyncDebounce('test');
const result = new Promise((resolve) => setTimeout(() => resolve(p),3000));
result.then(res => {
if(isValid()){
  // 只会拿到最后一次的数据
 }})
}

参考,转载:https://developer.aliyun.com/article/795869

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值