Make a JavaScript Function Sleep
Unlike many other languages, JavaScript doesn't have a built-in function to pause execution for a given period of time. There's
a good reason for this: in languages like C, sleep(2) blocks
the current thread for 2 seconds. Since JavaScript is
single-threaded, C-style sleep(2) would block the entire
JavaScript runtime for 2 seconds, and that isn't very useful.
However, you can pause an async function call
without blocking the rest of the JavaScript runtime. You
just need to await on a promise that resolves after a given
period of time.
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function run() {
// Pause execution of this async function for 2 seconds
await sleep(2000);
console.log('Waited for 2 seconds');
}
The new Promise() call uses JavaScript's promise constructor to create a new promise that resolves after ms milliseconds. And when
you await on a promise, you pause execution of that function
until the promise resolves, without impacting other functions.
For example, you can call two functions in parallel that call
sleep(), and neither function will block the other.
const start = Date.now();
async function pauseMe() {
await sleep(2000);
console.log('MS since start:', Date.now() - start);
}
// Will print something like "MS since start: 2006"
pauseMe();
// Will print something like "MS since start: 2010"
pauseMe();