这篇文章主要介绍“怎么用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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。