慎用JS中的间歇(周期)调用setInterval()

周期调用的方法是setInterval(),接受的第一个参数是要调用的函数或要执行的代码串。,第二个参数是周期性执行或调用 code 之间的时间间隔,以毫秒计。

调用setInterval()方法同样会返回一个ID,该ID可用于在将来某个时刻取消周期调用。取消周期调用的重要性要远远高于取消超时(setTimeout)调用,因为在不加干涉的情况下,周期调用将会一直执行到页面卸载。

let timer = setInterval(function () {
    $.get(`${serverUrl}/api/findById/${id}`, function (data) {
        if (data.success) {
            if (parseInt(data.result.value) == parseInt(expectValue)) {
                clearInterval(timer);
            } else if (count > ykTimeout) {
                clearInterval(timer);
            } else {
                xxxx;
            }
        }
    }).always(function () {
        count++;
    });
}, 1000);

如果后一个调用在前一个调用结束之前启动(设置的周期时间millisec过短或函数代码code执行时间过长),就会跳过第一个周期,直接执行后面第二个周期里的函数,等第二个结束后,继续执行第一个,所以最好不要使用周期调用。

(function loop(count) {
    $.ajax({
        url: `${serverUrl}/api/verify`,
        type: "POST",
        contentType: "application/json;charset=UTF-8",
        dataType: 'json',
        timeout : 5000,
        data: JSON.stringify(data)
    }).done(function (data) {
        if (data.success) {
            if (data.result) {
                // 执行后续函数
            } else {
                // 是否轮询的条件,比如超过5次就不再轮询
                if (count > 5) {
                    //超过5次
                } else {
                    loop(count + 1);
                }
            }
        } else {
            layer.msg(res.msg, {
                icon: 0,
                shade: 0.3
            });
        }
    }).fail(function (xhr, msg, err) {
        layer.msg(res.msg, {
            icon: 0,
            shade: 0.3
        });
    })
})(0);

不用setInterval(),也可以很好的控制轮询次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值