Порядок Promise.resolve и двух таймеров

В браузере при данном скрипте вывод будет S, E, P, T1, T2. Promise-реакция выполняется после синхронного кода и до callbacks таймеров.

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

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

В браузере при данном скрипте вывод будет S, E, P, T1, T2. Promise-реакция выполняется после синхронного кода и до callbacks таймеров.

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

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

Условие

Определите вывод:

console.log('S');
setTimeout(() => console.log('T1'), 0);
Promise.resolve().then(() => console.log('P'));
setTimeout(() => console.log('T2'), 0);
console.log('E');

Ответ

В браузере при данном скрипте вывод будет S, E, P, T1, T2. Promise-реакция выполняется после синхронного кода и до callbacks таймеров.

Одинаковая задержка таймеров не означает одновременный вызов: callbacks выполняются последовательно. Между задачами могут выполняться микрозадачи. Если один callback добавит новую реакцию Promise, она может выполниться до следующего таймера; порядок нельзя определять лишь по текстовому расположению всех console.log.

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

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

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

Подробнее