Using setTimeout
setTimeout
adds the event to the stack. And your example will try to call each immediately after 1s. So, you'd need to self-manage the intended execution time:
setTimeout(() => { document.title = "Hold on."; }, 1000);
setTimeout(() => { document.title = "Hold on.."; }, 2000); // <-- increase
setTimeout(() => { document.title = "Hold on..."; }, 3000); // <-- increase
Looping setTimeout
If setTimeout
is desired (for whichever reason), it is better to recursively call a function and embed that within the timeout function. This is demonstrated below:
let time = 0;
loop(time);
function loop(time){
setTimeout(() => {
message.textContent = "Hold on" + '.'.repeat(time%3+1);
loop(time+=1000) // <-- recursive call that also increments time
}, 1000);
}
<div id="message"></div>
Using setInterval
setInterval
alleviates some of the time management issues, especially if execution needs to occur in a regular sequence. Below demonstrates a continual loop interval.
let period_count = 0;
setInterval(function() {
let message = 'Hold on' + '.'.repeat( period_count++%4 );
document.querySelector('#message').textContent = message;
}, 1000);
<div id="message"></div>
Halting Execution
One difference between setInterval
and setTimeout
is that interval will continue to execute until it is stop. Below demonstrates how it might be stopped from w/in the loop body:
let period_count = 1;
let interval = setInterval(function() {
if ((period_count) == 3)
clearInterval(interval)
let message = 'Hold on' + '.'.repeat(period_count++);
document.querySelector('#message').textContent = message;
}, 1000);
<div id="message"></div>