用settTimeout()代替setInterval()

曾看到一篇文章里面写道setInterval()有很多弊端:
1.setInterval对自己调用的代码是否报错漠不关心。即使调用的代码报错了,它依然会持续的调用下去
2.setInterval无视网络延迟。在使用ajax轮询服务器是否有新数据时,必定会有一些人会使用setInterval,然而无论网络状况如何,它都会去一遍又一遍的发送请求,"如果网络状况不良,一个请求发出,还没有返回结果,它会坚持不懈的继续发送请求,最后导致的结果就是请求堆积。
3.setInterval并不定时。如果它调用的代码执行的时间小于定时的时间,它会跳过调用,这就导致无法按照你需要的执行次数或无法得到你想要的结果。
为了解决这些弊端,可以使用settTimeout()代替setInterval()具体实现如下:

1.写一个interval方法

var timer = null
interval(func, wait){
                var interv = function(){
                    func.call(null);
                    timer=setTimeout(interv, wait);
                };
                timer= setTimeout(interv, wait);
 },

2.和setInterval()一样使用它

interval(function () {},20)

3.终止定时器

if(timer){
    window.clearSetTimeout(timer);
    timer=null;
}
               

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章