не долго гугля наткнулся на
это (внутри диаграмма, которая всё объясняет)
По поводу того
почему промисы оформляются как микротаски есть такое пояснение:
Treating promises as tasks leads to performance problems, as callbacks may be unnecessarily delayed by task-related things such as rendering. It also causes non-determinism due to interaction with other task sources, and can break interactions with other APIs, but more on that later.
Если коротко, в event loop по очереди выполняются таски, однако сам таск может включать некую очередь из микрозадач, которая, в свою очередь, выполнится в контексте текущего таска. То есть, если взять таски
x и
y, где
y следует за
x, то получится, что
console.log('promise')
выполнится в контексте таска
x(в самом его конце, аккурат перед началом выполнения следующего таска), а
console.log('timer')
- в котексте таска
y.