В чем разница между setTimeout и setImmediate

«В чем разница между setTimeout и setImmediate» — вопрос из категории Асинхронность, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

setTimeout и setImmediate выполняют код асинхронно, но в разных фазах цикла событий Node.js.

  • setTimeout(callback, delay):

    • Добавляет callback в очередь таймеров после указанного delay (минимум 1мс, даже если 0).
    • Выполнится в фазе Timers цикла событий.
  • setImmediate(callback):

    • Добавляет callback в очередь Check.
    • Выполнится сразу после фазы Poll (I/O), но до Timers.

Пример:

setTimeout(() => console.log('timeout'), 0);
setImmediate(() => console.log('immediate'));

В этом примере порядок вывода может быть разным, так как зависит от задержки процесса. Но если оба вызываются внутри I/O цикла (например, в fs.readFile), setImmediate всегда выполнится первым.