AceDevHub
Beginner Node.js Interview QuestionsBeginnerConcept

Node.js · Question 5

What are the Node.js event loop phases?

Direct answer

libuv's loop runs timers → pending callbacks → idle/prepare → poll → check → close callbacks — with process.nextTick and Promise microtasks draining between every phase transition.

Each phase has a FIFO queue of callbacks. Node runs all callbacks in the current phase (or until a limit), then drains microtasks, then moves on — order matters for setTimeout vs setImmediate (Q7).

PhaseRuns
timerssetTimeout / setInterval callbacks whose threshold expired
pending callbacksDeferred I/O callbacks (e.g. some TCP errors)
idle, prepareInternal libuv housekeeping — ignore in apps
pollFetch new I/O events; execute I/O callbacks; may block waiting
checksetImmediate callbacks
close callbackse.g. socket.on('close') handlers
  1. Between phases — process.nextTick queue drains completely, then Promise microtasks, then next phase.
  2. Poll blocking — if no timers and no setImmediate, poll waits for I/O — efficient for servers.
  3. Node 11+ — timers phase uses libuv timer refactor; behavior stable for interviews but mention version if asked.
phases-demo.js
import fs from "node:fs";

setTimeout(() => console.log("timers phase"), 0);

setImmediate(() => console.log("check phase"));

fs.readFile(__filename, () => {
  console.log("poll phase — I/O callback");
  setTimeout(() => console.log("timer inside I/O cb"), 0);
  setImmediate(() => console.log("immediate inside I/O cb"));
});