Section

Asynchronous JavaScript

Priority

Low

Difficulty

Easy

Duration

5 min

What is the difference between `setTimeout()`, `setImmediate()`, and `process.nextTick()`?

`setTimeout()` schedules a callback to run after a minimum delay. `setImmediate()` schedules a callback to run after the current event loop completes. `process.nextTick()` schedules a callback to run before the next event loop iteration begins.

Javascript

TL;DR

setTimeout() schedules a callback to run after a minimum delay. setImmediate() schedules a callback to run after the current event loop completes. process.nextTick() schedules a callback to run before the next event loop iteration begins.

setTimeout(() => console.log('setTimeout'), 0);
setImmediate(() => console.log('setImmediate'));
process.nextTick(() => console.log('nextTick'));

In this example, process.nextTick() will execute first, followed by either setTimeout() or setImmediate() depending on the environment.


Difference between setTimeout(), setImmediate(), and process.nextTick()

setTimeout()

setTimeout() is a function that schedules a callback to be executed after a specified delay in milliseconds. The minimum delay is approximately 4ms in modern browsers and Node.js.

setTimeout(() => {
  console.log('Executed after at least 1000 milliseconds');
}, 1000);

setImmediate()

setImmediate() is a function available in Node.js that schedules a callback to be executed immediately after the current event loop phase completes. It is similar to setTimeout() with a delay of 0, but it is more efficient for immediate execution.

setImmediate(() => {
  console.log('Executed after the current event loop phase');
});

process.nextTick()

process.nextTick() is a function available in Node.js that schedules a callback to be executed before the next event loop iteration begins. It is used for deferring the execution of a function until the current operation completes.

process.nextTick(() => {
  console.log('Executed before the next event loop iteration');
});

Execution order

The execution order of these functions can be demonstrated with the following example:

setTimeout(() => console.log('setTimeout'), 0);
setImmediate(() => console.log('setImmediate'));
process.nextTick(() => console.log('nextTick'));

In this example, the output will be:

nextTick setTimeout or setImmediate (order may vary) setImmediate or setTimeout (order may vary)

process.nextTick() will always execute first, followed by either setTimeout() or setImmediate(), depending on the environment.

Further reading