使用setInterval实现循环时间

36
setInterval(function(){}, 200)

这段代码每200毫秒运行一次函数,如果我只想让函数运行10次,该怎么做?

谢谢帮助。

6个回答

90

使用一个计数器,每次回调执行时增加计数器的值,当它达到所需的执行次数时,使用clearInterval()来停止定时器:

var counter = 0;
var i = setInterval(function(){
    // do your thing

    counter++;
    if(counter === 10) {
        clearInterval(i);
    }
}, 200);

1
@JeffreySweeney https://dev59.com/Z3RC5IYBdhLWcg3wROpQ - vcsjones
1
不会,但是 jslint 会接受 window.setInterval。jslint 不会接受 function 关键字和 () 之间的空格缺失以及其他一些东西,但这是另一个讨论话题了。jslint 不会接受 ++--,但我们在这里是来帮助 OP 而不是“伤害他的感情” :) - karim79
我的意思是那些确实是不好的做法。++等等只是某个人的观点。 - Esailija

8
(function(){
var i = 10;
    (function k(){

        // your code here            

        if( --i ) {
        setTimeout( k, 200 );
        }

    })()
})()

1
使用setTimeout而不是setInterval会更好。我可能会选择var i = 10if (i--),但这只是我的个人偏好 :-) - Andy E

5

如果您希望它运行10次,并且每次运行的时间间隔为200毫秒,则200X10 = 2000。

var interval = setInterval(yourfunction, 200);
setTimeout(function() {
    clearInterval(interval)
}, 2000);

但它只运行了9次,所以我们必须再增加200毫秒。

var interval = setInterval(yourfunction, 200);
setTimeout(function() {
    clearInterval(interval)
}, 2200);

或者你可以在 setInterval 之前运行它

yourfunction();
var interval = setInterval(yourfunction, 200);
setTimeout(function() {
    clearInterval(interval)
}, 2000);

2
我知道这不安全,但是重要的是代码背后的思想,而不是它的实现方式。抱歉我的英语不好。 - shadownrun
2
我建议不要太认真地对待上面令人担忧的评论,但通常情况下传递函数是首选。值得注意的是,通过字符串传递的行为是不同的(即它在全局范围内查找函数),并且所有这些都支持旧版浏览器。 - Iain Collins
2
我喜欢这个解决方案。你唯一需要提供的是执行次数的变量,并将乘法作为第二个参数传递给 setTimeout() - Paul Burilichev

0

可重复使用的方法,具有选项循环次数延迟时间,并利用回调函数

const loopInterval = ( callBack, numberOfLoop, delay ) => {  
  let counter = 0;
  let i = setInterval( ()=> {
      callBack([counter, numberOfLoop]);
      counter++;
      if(counter === numberOfLoop ) clearInterval(i);
  }, delay);
}

const runThisFunctionAsCallBack = ( x ) => console.log(`Do something here...  Loop # ${x}` )

loopInterval( runThisFunctionAsCallBack, 4, 500 )


0

我的方法类似于JavaScripter199的(使用for循环)方法,但包括了setInterval函数。请参见下文:

 for (let runner = 0; runner < 10; runner++) {
      setInterval(() => {

            //Some code logic of yours.

        }
      }, 200 //run every 200 milliseconds);
    }

-1

只需使用for循环即可,更简单:

尝试使用以下代码。

for (counter=0; counter<0; counter++) {}

1
it's not complete answer - Maciej S.
这里有几个问题,counter 没有被初始化,而且这并没有回答如何在定时延迟内完成它的问题。 - Brayden
如果时间允许,您应该编辑答案以包括setInterval函数。 - DetectiveFalcon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接