前端javascript使用定时查询setInterval()需要注意的问题

**

记录一下前端使用定时查询setInterval()遇到的问题。

**

  1. 有问题的定时查询方法
    一般来说,我们会使用下面代码来执行定时查询方法
var timer = null;
// 需要定时查询的方法
function getData(){
    getOnlineData().then(() => { // 数据查询
		console.log('实时数据查询成功');
	})
}
// 调用定时查询的方法
function setTimer (){
    getData();
    if (timer) clearInterval(timer)
    timer = setInterval(() => {
        getData();
    }, 1000) // 设置1秒执行一次查询
}
// 执行定时查询
setTimer();

这种方法看似没什么问题,但是却有隐患。这种方法只适用于网络延时较低的情况下使用,如果你在网络信号不好的地方使用,你可能会遇到数据一直查询不出来的情况,打开F12调试时,发现方法一直有被定时执行但是就是没返回结果,原因就是调用方法getOnlineData()查询实时数据时,因为网络信号差没有马上把数据成功返回,这时下一次的查询已经开始执行了,导致数据一直无法以较快的速度成功返回,当数据成功返回时,这时的数据可能不是最新的了,非常的影响用户体验。

  1. 解决方案
    解决思路就是等上一次查询执行完成后,在延迟1秒执行下一次查询,代码如下
var timer = null;
// 需要定时查询的方法
function getData(){
    getOnlineData().then(() => { // 数据查询
        // 1. 这里已经代表接口调用成功
        // 2. 对数据进行相关处理
        if (timer) clearTimeout(timer);
        timer = setTimeout(() => {
            getData();
        }, 1000) // 延迟一秒执行
    })
}
// 执行定时查询
getData();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值