利用setTimeout來實(shí)現(xiàn)setInterval

在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)效果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JavaScript提供定時(shí)執(zhí)行代碼的功能,叫做定時(shí)器(timer),主要由setTimeout()和setInt...
    晚晴幽草閱讀 1,725評(píng)論 1 18
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,603評(píng)論 0 6
  • error code(錯(cuò)誤代碼)=0是操作成功完成。error code(錯(cuò)誤代碼)=1是功能錯(cuò)誤。error c...
    Heikki_閱讀 3,533評(píng)論 1 9
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,917評(píng)論 25 709

友情鏈接更多精彩內(nèi)容