溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用setTimeout模擬setInterval

發布時間:2022-12-05 16:40:31 來源:億速云 閱讀:317 作者:iii 欄目:編程語言

這篇文章主要介紹“怎么用setTimeout模擬setInterval”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么用setTimeout模擬setInterval”文章能幫助大家解決問題。

一 setInterval的時間誤差

setInterval(fn,300);

setInterval 執行機制,300ms會檢測一次任務隊列中有無未執行的上一次任務fn,如果沒有則將fn加入任務隊列,如果有則跳過。由于js單線程,如果在執行fn前還要耗時的任務執行,則會暴露缺點
1.某些間隔會被跳過
2.可能多個定時器會連續執行

setTimeout 執行機制

setTimeout(fn,300);

每隔300ms會將fn加入到任務隊列中。

二 用setTimeout 模擬 setInterval

1.利用setTimeout能解決 間隔會被跳過缺點
2.利用遞歸調用setTimeout 能解決多個定時器連續執行的缺點,確保執行fn的間隔時間>=300ms;由于js單線程,只能保證每隔300將fn加入到任務隊列,fn執行的時機與任務隊列中的其他任務是否執行完畢有關。

class Poll{
    constructor(){
      this.clearTime = null;
    }
    setInter(fn,time){
      this.clearTime = setTimeout(()=>{
        fn();
        this.setInter(fn,time);
      },time)
    }
    clearInter(){
      if(this.clearTime){
        clearTimeout(this.clearTime);
      }
    }
  }

關于“怎么用setTimeout模擬setInterval”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女