這篇文章主要介紹“怎么用setTimeout模擬setInterval”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么用setTimeout模擬setInterval”文章能幫助大家解決問題。
setInterval(fn,300);
setInterval 執行機制,300ms會檢測一次任務隊列中有無未執行的上一次任務fn,如果沒有則將fn加入任務隊列,如果有則跳過。由于js單線程,如果在執行fn前還要耗時的任務執行,則會暴露缺點
1.某些間隔會被跳過
2.可能多個定時器會連續執行
setTimeout(fn,300);
每隔300ms會將fn加入到任務隊列中。
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”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。