怎么用setTimeout模拟setInterval
这篇文章主要介绍“怎么用setTimeout模拟setInterval”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用setTimeout模拟setInterval”文章能帮助大家解决问题。
成都创新互联公司于2013年创立,先为平顶山等服务建站,平顶山等地企业,进行企业商务咨询服务。为平顶山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
一 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”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。
文章名称:怎么用setTimeout模拟setInterval
当前链接:http://hbruida.cn/article/gchgjd.html