В браузере при данном скрипте вывод будет S, E, P, T1, T2. Promise-реакция выполняется после синхронного кода и до callbacks таймеров.
Порядок Promise.resolve и двух таймеров
В браузере при данном скрипте вывод будет 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.