JS setInterval executes only once

You are passing the result of executing the function instead of the function itself. Since the result of the function is undefined, you are executing checkIfGameAlreadyStarted and then passing undefined to setInterval which doesn't do anything.

Instead of this:

setInterval(checkIfGameAlreadyStarted(), 1000);

Your statement should be this:

setInterval(checkIfGameAlreadyStarted, 1000);

without the parentheses at the end of the function name.

When you pass checkIfGameAlreadyStarted() that calls the function immediately and gets it's return value. When you pass checkIfGameAlreadyStarted that passes a reference to the function so setInterval can call it later (which is what you want).


To use checkIfGameAlreadyStarted without parameters, use the method below:

setInterval(checkIfGameAlreadyStarted, 1000);

In case checkIfGameAlreadyStarted has some parameters to be passed, use the method below:

setInterval(function(){checkIfGameAlreadyStarted(a,b);},1000)

This is the best approach I have seen. Other well tested methods are welcomed ,though.

Edit

Passing parameters after the timeout as suggested in the comments is cool but using the above method I stated helps to combat the bind this problem in case checkIfGameAlreadyStarted() is a class method like this this.checkIfGameAlreadyStarted().

In case you want to pass parameters after timeout, here is how it works,

setInterval(checkIfGameAlreadyStarted, 1000, parameter1, parameter2);