Результат: 1, 4, 2, 3. Async-функция начинает выполняться синхронно, await откладывает продолжение, а внешний then ждёт завершения всей функции run.
Как await выполненного Promise меняет порядок логов?
Результат: 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.