Что выведет код 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 ошибок.

Термины по теме