Порядок синхронного кода, await и таймера

Порядок вывода: 1, 2, 5, 3, 4. Тело async-функции выполняется синхронно до первого await, а продолжение после await становится асинхронным.

Короткий ответ

Что ответить на собеседовании

Порядок вывода: 1, 2, 5, 3, 4. Тело async-функции выполняется синхронно до первого await, а продолжение после await становится асинхронным.

Подробный разбор

Ответ с пояснениями

Условие

Что выведет браузер?

console.log(1);
async function run() {
  console.log(2);
  await Promise.resolve();
  console.log(3);
}
run();
setTimeout(() => console.log(4), 0);
console.log(5);

Ответ

Порядок вывода: 1, 2, 5, 3, 4. Тело async-функции выполняется синхронно до первого await, а продолжение после await становится асинхронным.

Даже уже выполненный Promise не делает продолжение после await синхронным. Сначала закончится текущий скрипт с выводом 5, затем возобновится run, а позже выполнится таймер. Если нужен результат run, вызывающая сторона тоже должна ожидать возвращаемый Promise; простой вызов не останавливает внешний код.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее