Выбор ответа Senior Event loop и libuv обновлено
nextTick внутри промиса
Вопрос
Что выведет CommonJS-скрипт?
Promise.resolve().then(() => {
console.log('p1');
process.nextTick(() => console.log('tick2'));
}).then(() => console.log('p2'));
process.nextTick(() => console.log('tick1'));
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: tick1 p1 p2 tick2. Сначала очередь nextTick: tick1.
Варианты ответа
- tick1 p1 tick2 p2
- p1 tick1 p2 tick2
- tick1 p1 p2 tick2правильный ответ
- p1 p2 tick1 tick2
Разбор
Сначала очередь nextTick: tick1. Потом очередь микрозадач промисов, и Node выполняет её до конца: p1, затем цепочка добавляет p2, он тоже выполняется в этом же проходе. Только когда очередь промисов пуста, Node снова проверяет nextTick и выводит tick2.
tick1 p1 tick2 p2предполагает, что nextTick прерывает очередь промисов. В Node 22 этого нет.- Варианты с
p1первым неверны: в CommonJS nextTick идёт раньше промисов.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Event loop и libuv»
- Тяжёлый цикл без блокировки event loop
- Код-ревью: что блокирует event loop
- Что блокирует event loop
- Объясни event loop в Node.js
- setImmediate и setTimeout внутри I/O
- setTimeout(0) против setImmediate на верхнем уровне
- Что такое libuv
- Рекурсивный process.nextTick