Sleep in NodeJS
Feb 8, 2022
One way to delay execution of a function in NodeJS is to use the seTimeout()
function.
Just put the code you want to delay in the callback.
For example, below is how you can wait 1 second before executing some code.
setTimeout(function() {
console.log('This printed after about 1 second');
}, 1000);
Using async/await
You can use async/await with promises to delay execution without callbacks.
function delay(time) {
return new Promise(resolve => setTimeout(resolve, time));
}
run();
async function run() {
await delay(1000);
console.log('This printed after about 1 second');
}
Using the Sleep Command
You can use execSync
to invoke your OS' sleep
command.
const {execSync} = require('child_process');
execSync('sleep 1'); // block process for 1 second.
This is different from using the delay(time)
function from the previous examples because delay(time)
is still non-blocking.
For example, you can run multiple delay()
calls in parallel using Promise.all()
async function run() {
const start = Date.now();
await Promise.all([delay(1000), delay(1000)]);
// Prints about 1000, because the `delay()` calls run in parallel
console.log('Elapsed:', Date.now() - start);
}
function delay(time) {
return new Promise(resolve => setTimeout(resolve, time));
}
run();
However, with execSync
, you cannot run multiple execSync('sleep 1')
in parallel.
execSync()
blocks the entire Node process, meaning no other code can execute.
Be careful about using execSync()
!
const {execSync} = require('child_process');
const start = Date.now();
execSync('sleep 1');
execSync('sleep 1');
// Prints about 2000, because `execSync()` runs in series
console.log('Elapsed:', Date.now() - start);
Did you find this tutorial useful? Say thanks by starring our repo on GitHub!