js for循环如何延时休眠
varrts=[0,1100,2000,3000,10000];//等待时间数组vark=0;for(leti=0;i<rts.length;i++){if(k==1){...
var rts= [0,1100,2000,3000,10000]; //等待时间数组
var k=0;
for ( let i=0;i<rts.length;i++ ){
if (k==1){
k=0;
break;
} else{
setTimeout(() => {
list()
}, rts[i])
}
}
想实现的功能:根据rst数组中的毫秒数,每次等待不同的时间然后执行list(),其中有一个k值是list()中返回的,如果等于1,for循环要中止。上面代码中,是先把for循环执行完了,才会去执行list(),等不到返回k值就执行完了,所以无法做k值的判断。我的想法是有没有办法直接让for循环每执行一次就等待一定时间(时间是不固定的,从rts中取出的时间),如果可以实现,那么把setTimeout()去掉,可以达到一样的效果。
试过setInterval({},rts[i])的方法,也不行,延时的值不会变,会固定取第一次的值。
请大神帮忙看看有没有好的解决方法。 展开
var k=0;
for ( let i=0;i<rts.length;i++ ){
if (k==1){
k=0;
break;
} else{
setTimeout(() => {
list()
}, rts[i])
}
}
想实现的功能:根据rst数组中的毫秒数,每次等待不同的时间然后执行list(),其中有一个k值是list()中返回的,如果等于1,for循环要中止。上面代码中,是先把for循环执行完了,才会去执行list(),等不到返回k值就执行完了,所以无法做k值的判断。我的想法是有没有办法直接让for循环每执行一次就等待一定时间(时间是不固定的,从rts中取出的时间),如果可以实现,那么把setTimeout()去掉,可以达到一样的效果。
试过setInterval({},rts[i])的方法,也不行,延时的值不会变,会固定取第一次的值。
请大神帮忙看看有没有好的解决方法。 展开
1个回答
展开全部
for语句不会因为有setTimeout的存在而停止,他会跳过setTimeout,setTimeout设定的是100毫秒的延迟,而for语句执行根本用不了那么长时间所以会先弹出九个alert,然后才setTimeout中的alert 可以使用递归来解决这个问题 var i=0; function al() { i++; if(i<10) setTimeout(function(){alert("i="+i);al()},2000); } al();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询