Event loop
O mecanismo que faz o JavaScript ser single-threaded e, ainda assim, assíncrono — executa uma coisa por vez, checando a fila entre as rodadas.
Quando você chama fetch(), o callback entra na fila. O event loop pega o próximo assim que o atual termina. Bloqueie a thread (um loop pesado) e tudo congela. A fila de microtasks (Promises) tem prioridade sobre a de macrotasks (setTimeout).