В каком порядке выполняются Promise и два таймера?

Вывод: A, E, C, B, D. Синхронный код завершается первым, затем выполняется реакция Promise, после неё — два таймера в порядке постановки в этом примере.

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

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

Вывод: A, E, C, B, D. Синхронный код завершается первым, затем выполняется реакция Promise, после неё — два таймера в порядке постановки в этом примере.

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

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

Условие

В браузере выполнен один скрипт:

console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
setTimeout(() => console.log('D'), 0);
console.log('E');

Других задач, влияющих на эти сообщения, нет. Определите порядок.

Ответ

Вывод: A, E, C, B, D. Синхронный код завершается первым, затем выполняется реакция Promise, после неё — два таймера в порядке постановки в этом примере.

Нулевой timeout не прерывает текущий скрипт и не означает немедленный вызов. Обработчик then ставится в очередь микрозадач; она обрабатывается до перехода к следующим задачам таймеров. Задержка таймера — не точное время исполнения: фактический запуск может быть позже из-за занятого потока. В этой задаче важен относительный порядок сообщений, а не миллисекунды.

Источник: html.spec.whatwg.org.

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

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

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

Подробнее