Что выведет код Senior Event loop обновлено

Каждый await это один шаг микрозадач

Вопрос

Что выведет код? По строке на каждый вывод.

async function a() {
  console.log('a1');
  await null;
  console.log('a2');
  await null;
  console.log('a3');
}
a();
Promise.resolve()
  .then(() => console.log('p1'))
  .then(() => console.log('p2'));
console.log('sync');

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

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

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

Коротко

Код выведет: a1, sync, a2, p1, a3, p2. a1 синхронно, затем await null ставит продолжение функции в микрозадачи.

Что выведет

a1
sync
a2
p1
a3
p2

Разбор

a1 синхронно, затем await null ставит продолжение функции в микрозадачи. Цепочка промиса ставит p1. После sync микрозадачи выполняются по очереди: a2 (и следующий await ставит продолжение в конец очереди), затем p1 (и его then ставит p2). Дальше в очереди a3, потом p2. await на не-промисе и then каждый занимают ровно один шаг очереди, поэтому вывод чередуется.

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

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

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