Что выведет код Middle Асинхронные паттерны обновлено

Что выведет: await, then, nextTick и таймер

Вопрос

Напиши вывод CommonJS-скрипта в Node.js 22, по строке на вызов console.log.

async function a() {
  console.log('a1');
  await b();
  console.log('a2');
}
async function b() {
  console.log('b');
}
console.log('start');
setTimeout(() => console.log('timeout'), 0);
a();
Promise.resolve().then(() => console.log('then'));
process.nextTick(() => console.log('tick'));
console.log('end');

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

Напишите, что выведет код: каждый вывод с новой строки.

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

Коротко

Код выведет: start, a1, b, end, tick, a2, then, timeout. Синхронно: start, затем a() печатает a1 и вызывает b(), которая тоже синхронно печатает b. await откладывает продолжение a в микрозадачу, которая встаёт в очередь раньше then.

Что выведет

start
a1
b
end
tick
a2
then
timeout

Разбор

Синхронно: start, затем a() печатает a1 и вызывает b(), которая тоже синхронно печатает b. await откладывает продолжение a в микрозадачу, которая встаёт в очередь раньше then. Затем синхронный end. После синхронного кода: сначала nextTick (tick), потом микрозадачи в порядке постановки: a2, then. Таймер последним.

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

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

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