setInterval with loop time
Asked Answered
V

6

36
setInterval(function(){}, 200)

this code run the function each 200 miliseconds, how do I do it if I only want the function to be ran 10 times.

thanks for help.

Venesection answered 7/12, 2011 at 20:23 Comment(0)
S
92

Use a counter which increments each time the callback gets executed, and when it reaches your desired number of executions, use clearInterval() to kill the timer:

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

    counter++;
    if(counter === 10) {
        clearInterval(i);
    }
}, 200);
Sivas answered 7/12, 2011 at 20:24 Comment(3)
@JeffreySweeney #359994Monies
No, but jslint will accept window.setInterval. jslint will not accept the lack of space between the function keyword and the (), and other stuff, but that is another discussion altogether. jslint will not accept ++ and --, but we're here to help OP and not "hurt his feelings" :)Sivas
I meant that those are actual bad practices. ++ and so on is just some guy's opinion.Shemikashemite
S
8
(function(){
var i = 10;
    (function k(){

        // your code here            

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

    })()
})()
Shemikashemite answered 7/12, 2011 at 20:28 Comment(1)
+1 for using setTimeout instead of setInterval. I would probably go with var i = 10 and if (i--), but that's just me :-)Colombi
S
5

if you want it to run for 10 times and the time it should run is every 200 miliseconds then 200X10 = 2000

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

but it only runs 9 times so we must add more 200 miliseconds

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

or you could run it before the setInterval

yourfunction();
var interval = setInterval(yourfunction, 200);
setTimeout(function() {
    clearInterval(interval)
}, 2000);
Scanty answered 26/12, 2013 at 17:11 Comment(3)
i know its not safe but, the thing is the idea behind the code not how its done sorry my bad englishScanty
I suggest not taking the alarming comment above not too seriously, but generally passing a function is preferred. Worth nothing that passing by string is different behaviour (i.e. it looks for the function in the global scope) and all that's supported in older browsers.Strictly
I like this solution. The only thing you should provide for the clear is variable for the times of execution, and pass the multiply as a second parameter to the setTimeout().Coop
B
0

Reusable approach with options number of loop and delay time and utilize callback function

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 )
Brachyuran answered 11/12, 2022 at 8:6 Comment(0)
D
0

My approach is similar to JavaScripter199's (the use of a for loop) approach but with the included setInterval function. See below:

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

            //Some code logic of yours.

        }
      }, 200 //run every 200 milliseconds);
    }
Dooryard answered 10/1, 2023 at 13:46 Comment(0)
C
-1

Just use a for loop instead, much easier:

Just try this code.

for (counter=0; counter<0; counter++) {}
Colver answered 18/4, 2019 at 7:13 Comment(3)
it's not complete answerMclyman
This has a couple of issues, the counter is never initialized and this doesn't answer the question of how to do it within a timed delay.Shuler
When time allows you should edit the answer to include the setInterval function.Dooryard

© 2022 - 2024 — McMap. All rights reserved.