Что выведет код Middle Event loop спрашивают часто обновлено
Синхронный executor и await готового промиса
Вопрос
Что выведет код? По строке на каждый вывод.
const p = new Promise((resolve) => {
console.log('executor');
resolve('готово');
console.log('после resolve');
});
async function run() {
console.log('run старт');
const v = await p;
console.log('run ' + v);
}
run();
p.then((v) => console.log('then ' + v));
console.log('конец');
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: executor, после resolve, run старт, конец, run готово, then готово. Функция-исполнитель промиса выполняется синхронно, и resolve не прерывает её: печатаются executor и после resolve.
Что выведет
executor
после resolve
run старт
конец
run готово
then готово
Разбор
Функция-исполнитель промиса выполняется синхронно, и resolve не прерывает её: печатаются executor и после resolve. Async-функция до первого await тоже синхронна: run старт. await p подписывается на уже выполненный промис раньше, чем p.then, поэтому обе реакции встают в очередь микрозадач в этом порядке. Сначала синхронный конец, потом run готово, потом then готово.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Каждый await это один шаг микрозадач
Следующий вопрос
Микрозадача между двумя таймерами