Асинхронный вывод и приоритеты очередей

Порядок: promise baz, initial flow, promise foo, promise fez, promise bar, timeout 0. Executor new Promise выполняется сразу, а then — через микрозадачу.

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

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

Порядок: promise baz, initial flow, promise foo, promise fez, promise bar, timeout 0. Executor new Promise выполняется сразу, а then — через микрозадачу.

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

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

Условие

Выполнить код‑ревью: исследовать порядок исполнения и приоритеты задач (macrotask vs microtask).

setTimeout(() => {
  console.log('timeout 0');
});

Promise.resolve()
  .then(() => {
    console.log('promise foo');
  })
  .then(() => {
    console.log('promise bar');
  });

const promise = new Promise((resolve, reject) => {
  console.log('promise baz');
  resolve(true);
});

promise.then(() => {
  console.log('promise fez');
});

console.log('initial flow');

Ответ

Порядок: promise baz, initial flow, promise foo, promise fez, promise bar, timeout 0. Executor new Promise выполняется сразу, а then — через микрозадачу.

Foo уже стоит в очереди, когда добавляется fez. Во время foo следующий then с bar только становится доступным и добавляется после fez. Таймер выполняется, когда синхронный код и готовая очередь микрозадач завершены.

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

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

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

Подробнее