首页 > Web开发 > 详细

前端js使用for进行setTimeout延迟操作

时间:2020-04-23 17:09:42      阅读:54      评论:0      收藏:0      [点我收藏+]

最初想着普通for循环根据时间延迟进行调用方法,能达到依次进行,但是结果是执行了同样的参数方法N遍。

let mm =1000;

for (let i in this.man.lamp) {
setTimeout(function() {
this.turnLamp(i,1);
}, mm+100);
}

原因就是因为for循环的阻塞机制。在上面的代码中,setTimeout这个定时器需要等待for循环 执行完成,而for循环执行完成了之后,i已经是最后的值了,此时才开始执行setTimeout,因此会出现同样结果。

 

怎么解决事件阻塞

其实,阻塞作为js引擎的处理方式,我们最好不要想着解决“阻塞”,而是让我们想执行的代码,插入到“主线程”中。

let tim = 2000;
for (let i in this.man.lamp) {
let that = this;
(function(i) {
tim = tim+500;
setTimeout(function() {
that.turnLamp(i,1);
}, tim);
tim = tim+500;
setTimeout(function() {
that.turnLamp(i,0);
}, tim);
})(i)
}

for循环中执行函数将i作为参数传入进去,这样settimeout就会立即执行而不会等待for循环结束

 

前端js使用for进行setTimeout延迟操作

原文:https://www.cnblogs.com/xiao1993/p/12761877.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!