Промис выполняется первым, потому что это м
икротаск, а таймаут - м
акротаск.
Все микротаски завершаются до перехода к следующему макротаску.
Вот объяснение на русском языке:
https://learn.javascript.ru/event-loop#makrozadach...
А вот спецификация эвентлупа если нужны подробности:
https://html.spec.whatwg.org/multipage/webappapis....