用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;
}
               

 

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