有一个ajax轮询,每隔5秒钟发送一次请求,先发送请求A,5秒后再发送请求B,如果A请求的返回数据比较慢,B返回了数据A才返回,这时A返回的数据会覆盖B返回的,这个怎么处理?才能不覆盖
有一个ajax轮询,每隔5秒钟发送一次请求,先发送请求A,5秒后再发送请求B,如果A请求的返回数据比较慢,B返回了数据A才返回,这时A返回的数据会覆盖B返回的,这个怎么处理?才能不覆盖
请求的时候生成一个唯一id,存入等待请求的变量中,这个变量只存最新的id。
请求时将id传入作用域中,当请求返回执行回调时,先用id去跟等待请求的变量匹配,匹配上了才做下一步处理。
请求回来才发下一次请求呗.
或者每次发请求前,abort前一次请求.
const sleep = time => new Promise(resolve => setTimeout(resolve, time));
async function loop() {
while(loop_flag) {
await sleep(5000);
await request();
}
}
13 回答13k 阅读
8 回答2.7k 阅读
2 回答5.2k 阅读✓ 已解决
7 回答2.1k 阅读
5 回答1.3k 阅读
3 回答2.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
一个笨办法...
在全局区域內或者 storage 里记录一个当前显示的数据的请求时间
每次请求,记录下当前请求的时间,当请求响应完成时,把这次请求的请求时间和上面说的时间对比,如果小于,就抛弃,如果大于,就更新为当前请求的请求时间,并渲染数据.