33
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.

bingjie2680
  • 7,505
  • 7
  • 43
  • 71

4 Answers4

88

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);
karim79
  • 334,458
  • 66
  • 409
  • 405
  • 1
    @JeffreySweeney http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use – vcsjones Dec 07 '11 at 20:26
  • 1
    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" :) – karim79 Dec 07 '11 at 20:45
  • I meant that those are actual bad practices. ++ and so on is just some guy's opinion. – Esailija Dec 07 '11 at 20:50
7
(function(){
var i = 10;
    (function k(){

        // your code here            

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

    })()
})()
mrbm
  • 1,098
  • 1
  • 12
  • 36
Esailija
  • 134,577
  • 23
  • 263
  • 318
  • 1
    +1 for using `setTimeout` instead of `setInterval`. I would probably go with `var i = 10` and `if (i--)`, but that's just me :-) – Andy E Dec 07 '11 at 20:34
4

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);
ThiefMaster
  • 298,938
  • 77
  • 579
  • 623
shadownrun
  • 352
  • 4
  • 15
  • 2
    i know its not safe but, the thing is the idea behind the code not how its done sorry my bad english – shadownrun Dec 26 '13 at 17:35
  • 2
    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. – Iain Collins Aug 19 '14 at 17:24
  • 2
    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()`. – Paul Burilichev Apr 02 '17 at 13:49
0

Just use a for loop instead, much easier:

Just try this code.

for (counter=0; counter<0; counter++) {}
Dominique
  • 13,061
  • 14
  • 45
  • 83