Disse er gradvist pænere måder at udtrykke non-blocking arbejde på en enkelt tråd, alle drevet nedenunder af en event loop, der kører klare callbacks ét ad gangen. De styrer hvornår kode genoptages, ikke flere tråde.
Event loop'en
En enkelttrådet løkke vedligeholder en kø af klare callbacks. Når en async-operation (timer, I/O) fuldføres, sættes dens callback i kø; løkken tager den næste og kører den til ende og gentager så. Intet afbryder et kørende callback, så langvarigt CPU-arbejde blokerer alt.
[event loop] → run callback → I/O finishes → enqueue callback → run next → ...
