Ordem de execução: síncrono, microtask e macrotask
Pergunta
Qual a ordem de execução entre código síncrono, uma Promise (microtask) e um setTimeout (macrotask) no JavaScript?
Resposta esperada
Todo código síncrono roda primeiro, até a call stack esvaziar. Depois, o event loop drena completamente a fila de microtasks (Promises, queueMicrotask) antes de processar a próxima macrotask. Só então uma macrotask (setTimeout, setInterval, I/O) é executada — e depois dela, a fila de microtasks é drenada de novo antes da macrotask seguinte. Por isso um `Promise.resolve().then(...)` sempre roda antes de um `setTimeout(fn, 0)`, mesmo com delay zero.
Por que perguntam isso
Pergunta clássica que revela se o candidato já debugou uma race condition real envolvendo Promises e timers, ou só decorou 'Promise roda antes'.