Как await выполненного Promise меняет порядок логов?

Результат: 1, 4, 2, 3. Async-функция начинает выполняться синхронно, await откладывает продолжение, а внешний then ждёт завершения всей функции run.

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

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

Результат: 1, 4, 2, 3. Async-функция начинает выполняться синхронно, await откладывает продолжение, а внешний then ждёт завершения всей функции run.

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

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

Условие

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

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

Ответ

Результат: 1, 4, 2, 3. Async-функция начинает выполняться синхронно, await откладывает продолжение, а внешний then ждёт завершения всей функции run.

Даже уже выполненный Promise не делает продолжение после await синхронным в рамках исходного стека. Сначала run успевает напечатать 1 и возвращает Promise, затем внешний код печатает 4. Продолжение печатает 2, после чего выполняется зарегистрированная реакция с 3. Эти правила отличаются от обычного прямого вызова без await.

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

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

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

Подробнее