Выбор ответа Junior Event loop и libuv спрашивают часто обновлено

Порядок nextTick, промиса и setTimeout

Вопрос

Что выведет этот CommonJS-скрипт в Node.js 22?

console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
process.nextTick(() => console.log('D'));
console.log('E');

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: A E D C B. Сначала весь синхронный код: A, E.

Варианты ответа

  1. A E C D B
  2. A E D C Bправильный ответ
  3. A D C E B
  4. A E B D C

Разбор

Сначала весь синхронный код: A, E. Затем Node опустошает очередь process.nextTick (D), потом очередь микрозадач промисов (C). Таймер сработает только в фазе timers следующего оборота (B).

  • A E C D B неверно: в CommonJS nextTick обрабатывается раньше промисов.
  • A D C E B неверно: асинхронные колбэки не прерывают синхронный код.
  • A E B D C неверно: таймер не может обогнать микрозадачи и nextTick.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме