What is Microtask Queue in Node.js: Explanation and Example
microtask queue is a special queue that holds tasks like promise callbacks to run immediately after the current operation completes but before the next event loop phase starts. It ensures that microtasks run quickly and in order, allowing smooth asynchronous code execution.How It Works
Think of the Node.js event loop as a busy chef in a kitchen. The chef handles different orders (tasks) one by one. The microtask queue is like a small tray where urgent, quick tasks are placed to be done immediately after the current dish is finished but before starting a new order.
When Node.js runs your code, it executes synchronous code first. Then, before moving on to the next big task (like handling I/O or timers), it checks the microtask queue. If there are any microtasks, such as promise callbacks, it runs all of them right away. This keeps your asynchronous code responsive and predictable.
This queue is prioritized over other queues like the callback queue, so microtasks always run first after the current code finishes.
Example
This example shows how microtasks run before other tasks in Node.js using promises and setTimeout.
console.log('Start'); setTimeout(() => { console.log('Timeout callback'); }, 0); Promise.resolve().then(() => { console.log('Promise callback'); }); console.log('End');
When to Use
Use the microtask queue when you want to run code right after the current synchronous code finishes but before any other delayed tasks. This is common with promises and async/await, which rely on microtasks to handle their callbacks.
For example, if you want to update UI or state immediately after a promise resolves but before any timers or I/O callbacks run, microtasks are the right choice. They help keep your app responsive and avoid unexpected delays.
In Node.js, understanding microtasks helps you write efficient asynchronous code and avoid bugs related to timing and order of execution.
Key Points
- The microtask queue runs tasks like promise callbacks immediately after current code.
- It has higher priority than other queues like timers or I/O callbacks.
- Helps keep asynchronous code predictable and fast.
- Commonly used with promises and async/await in Node.js.