Similarly to
setTimeout, that executes the callback function once, you can start the repeated execution of the function in JavaScript using setInterval
.
Starting setInterval
timer
In JS, setInterval
has the same params as setTimeout
.
callback
- the function that should be called after a delaydelay
- in milliseconds
The callback
goes into setInterval
as the first argument, followed by the delay
. When executed, setInterval
sets the timer, that will call callback
function each delay
milliseconds.
console.log('START!');
setInterval(() => console.log('bingo'), 2000);
We’ll see the message START!
in the console followed by the strings bingo
, printed every 2 seconds on a new line.
START!
bingo
bingo
bingo
...
The function inside of setInterval
can use external variables.
const delay = 2;
let i = 1;
console.log('START!');
setInterval(() => {
console.log(`message ${i}, appeared after ${delay * i++} seconds`), delay * 1000);
The output starts like this:
START!
message 1,
appeared after 2 seconds
message 2,
appeared after 4 seconds
message 3,
appeared after 6 seconds
message 4,
appeared after 8 seconds
And continues forever.
Stopping setInterval
execution
To stop the execution of setInterval
in JavaScript, you should use the function clearInterval
. To understand how it works, let’s go into detail:
-
setInterval
returns the object that holds all the data about the scheduledcallback
execution:Timeout { _idleTimeout: 2000, _idlePrev: [TimersList], _idleNext: [TimersList], _idleStart: 141, _onTimeout: [Function], _timerArgs: undefined, _repeat: 2000, _destroyed: false, [Symbol(refed)]: true, [Symbol(asyncId)]: 5, [Symbol(triggerId)]: 1 }
-
this object can be saved into the variable
-
when we don’t need the repeated interval calls anymore, we pass the
Timeout
object into the functionclearInterval
. The timer stops and ourcallback
isn’t called anymore.
Code example:
const delay = 2;
const limit = 2;
let i = 1;
console.log('START!');
const limitedInterval = setInterval(() => {
console.log(`message ${i}, appeared after ${delay * i++} seconds`);
if (i > limit) {
clearInterval(limitedInterval);
}
}, delay * 1000);
Anonymous function inside setInterval
will be called only once.
Then, the condition i > limit
turns true, and the interval will be stopped with clearInterval(limitedInterval)
.
START!
message 1, appeared after 2 seconds
message 2, appeared after 4 seconds
Read more JavaScript tutorials or Learn Full-Stack JS from scratch!