Вопрос проверяет понимание event loop и порядка выполнения синхронного и асинхронного кода.
Короткий ответ
Сначала всегда выполняется весь синхронный код. Затем выполняются microtasks, в том числе обработчики Promise.then. Только после этого обрабатываются macrotasks, такие как setTimeout. Поэтому вывод в консоль часто отличается от интуитивных ожиданий. Это поведение строго определено спецификацией.
Длинный ответ
Зарегистрироваться
Развернутый ответ доступен только зарегистрированным пользователям.