Выбор ответа 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.
Варианты ответа
- A E C D B
- A E D C Bправильный ответ
- A D C E B
- 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 ошибок.
Предыдущий вопрос
Event loop Node и браузера: в чём разница
Следующий вопрос
Что выведет: await, nextTick и setImmediate
Термины по теме
Ещё по теме «Event loop и libuv»
- Тяжёлый цикл без блокировки event loop
- Код-ревью: что блокирует event loop
- Что блокирует event loop
- Объясни event loop в Node.js
- setImmediate и setTimeout внутри I/O
- setTimeout(0) против setImmediate на верхнем уровне
- Что такое libuv
- Рекурсивный process.nextTick