setInterval 的弊端
- setInterval 對自己調(diào)用的代碼是否報錯漠不關(guān)心孕蝉。即使調(diào)用的代碼報錯了,它依然會持續(xù)的調(diào)用下去
- setInterval 無視網(wǎng)絡(luò)延遲宙拉。在使用 ajax 輪詢服務(wù)器是否有新數(shù)據(jù)時魔慷,必定會有一些人會使用setInterval,然而無論網(wǎng)絡(luò)狀況如何鱼蝉,它都會去一遍又一遍的發(fā)送請求洒嗤,如果網(wǎng)絡(luò)狀況不良,一個請求發(fā)出蚀乔,還沒有返回結(jié)果烁竭,它會堅持不懈的繼續(xù)發(fā)送請求,最后導(dǎo)致的結(jié)果就是請求堆積吉挣。
- setInterval 并不定時派撕。如果它調(diào)用的代碼執(zhí)行的時間小于定時的時間,它會跳過調(diào)用睬魂,這就導(dǎo)致無法按照你需要的執(zhí)行次數(shù)或無法得到你想要的結(jié)果终吼。
- setInterval 做動畫時低頻會有卡頓現(xiàn)象,尤其是在低端機(jī)型使用
替代方案
-
使用setTimeout
let timer = null
interval(func, wait){
let interv = function(){
func.call(null);
timer=setTimeout(interv, wait);
};
timer= setTimeout(interv, wait);
},
-
使用async + while(推薦)
function delay(ms = 1000) {
return new Promise((resolve => {
setTimeout( () => {
resolve()
}, ms)
}))
}
async function interval() {
while (true){
try {
await delay(3000);
//doSome
}catch (e) {
// e
}
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者