JavaScript does not come with a sleep()
function out of the box. That's probably a good idea considering the environments where it runs and the trouble it could cause if used incorrectly. The closest equivalent is the setTimeout()
function, but there are other, less common ways to implement a function that will pause execution for a specified amount of time.
JavaScript's setTimeout()
sets a timer which executes some code once the timer expires. Only the code inside the setTimeout()
callback will execute after the timer expires. This can lead to nesting issues, as well as code executing out of order if you are not careful.
const printNums = () => {
console.log(1);
setTimeout(() => console.log(2), 500);
console.log(3);
};
printNums(); // Logs: 1, 3, 2 (2 logs after 500ms)
While strongly discouraged, Date.prototype.getTime()
can be used inside a while
loop to pause execution for a set amount of time. You can easily define a synchronous sleep()
function like this:
const sleepSync = (ms) => {
const end = new Date().getTime() + ms;
while (new Date().getTime() < end) { /* do nothing */ }
}
const printNums = () => {
console.log(1);
sleepSync(500);
console.log(2);
console.log(3);
};
printNums(); // Logs: 1, 2, 3 (2 and 3 log after 500ms)
A less intrusive way to go about implementing a sleep()
function is to utilize the async
and await
keywords added in JavaScript ES6, a Promise
and setTimeout()
. Note that the resulting function must be executed in an async
function and has to be called with await
:
const sleep = (ms) =>
new Promise(resolve => setTimeout(resolve, ms));
const printNums = async() => {
console.log(1);
await sleep(500);
console.log(2);
console.log(3);
};
printNums(); // Logs: 1, 2, 3 (2 and 3 log after 500ms)
JavaScript, Date
Creates a generator, that generates all dates in the given range using the given step.
JavaScript, Date
Checks if a valid date object can be created from the given values.
JavaScript, Date
Learn how you can compare two dates in JavaScript using various different techniques.