Когда продолжится async-функция после таймера

Вывод: start, sync, after. Функция приостанавливается на незавершённом Promise; таймер разрешает его позже, после чего продолжение попадает в микрозадачи.

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

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

Вывод: start, sync, after. Функция приостанавливается на незавершённом Promise; таймер разрешает его позже, после чего продолжение попадает в микрозадачи.

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

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

Условие

Определите вывод:

async function run() {
  console.log('start');
  await new Promise(resolve => setTimeout(resolve, 0));
  console.log('after');
}
run();
console.log('sync');

Почему after не печатается сразу?

Ответ

Вывод: start, sync, after. Функция приостанавливается на незавершённом Promise; таймер разрешает его позже, после чего продолжение попадает в микрозадачи.

Async-функция сразу возвращает Promise вызывающему коду. Таймер не блокирует поток и не обещает точную задержку в ноль миллисекунд. Если вместо resolve в callback возникнет необработанное исключение, оно не превратится автоматически в отклонение этого Promise; для ошибок асинхронной операции нужно вызвать reject.

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

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

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

Подробнее