Порядок вывода: 1, 2, 5, 3, 4. Тело async-функции выполняется синхронно до первого await, а продолжение после 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; простой вызов не останавливает внешний код.