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ā)送請求,最后導致的結(jié)果就是請求堆積。
- setInterval 并不定時。如果它調(diào)用的代碼執(zhí)行的時間小于定時的時間,它會跳過調(diào)用,這就導致無法按照你需要的執(zhí)行次數(shù)或無法得到你想要的結(jié)果。
- setInterval 做動畫時低頻會有卡頓現(xiàn)象,尤其是在低端機型使用
替代方案
-
使用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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。