在Js中,當(dāng)我們要在一定間隔時(shí)間內(nèi)不斷執(zhí)行同一函數(shù),我們可以使用setInterval函數(shù),但setInterval在某些情況下使用時(shí)也存在一定問題。
1.不去關(guān)心回調(diào)函數(shù)是否還在運(yùn)行
在某些情況下,函數(shù)可能需要比間隔時(shí)間更長的時(shí)間去完成執(zhí)行。比如說是用setInterval每隔5秒對遠(yuǎn)端服務(wù)器進(jìn)行輪詢,網(wǎng)絡(luò)延遲,服務(wù)器無響應(yīng)以及其他因素將會(huì)阻止請求按時(shí)按成。結(jié)果會(huì)導(dǎo)致返回一串無必要的排成隊(duì)列請求。
2.忽視錯(cuò)誤
因?yàn)槟承┰?,setInterval調(diào)用的代碼中會(huì)出現(xiàn)一個(gè)錯(cuò)誤,但是代碼并不會(huì)中止執(zhí)行而是繼續(xù)執(zhí)行錯(cuò)誤的代碼。
3.缺乏靈活性
除了前面提到的缺點(diǎn)之外,我非常希望setInterval方法能有一個(gè)表明執(zhí)行次數(shù)的參數(shù)而不是無休止的執(zhí)行下去。
比如下面使用setInterval方法的代碼:
var a = 0;
function time(){
a++;
if( a > 10 ){
window.clearInterval(index);
}
console.log(a);
}
var index = setInterval("time()",1000);
可以使用如下setTimeout()來代替
function time(a){
a++;
console.log(a);
if( a > 10 ){
return
}
setTimeout(time(a),1000);
}
time(0);
所以,盡量不要使用setInterval,而要用setTimeout去模擬實(shí)現(xiàn)效果。