Nämä ovat asteittain mukavampia tapoja ilmaista non-blocking-työtä yhdellä säikeellä, kaikki alta ajettuna event loopilla, joka ajaa valmiit callbackit yksi kerrallaan. Ne hallitsevat milloin koodi jatkuu, eivät useita säikeitä.
Event loop
Yksisäikeinen silmukka ylläpitää jonoa valmiista callbackeista. Kun async-operaatio (ajastin, I/O) valmistuu, sen callback laitetaan jonoon; silmukka poimii seuraavan ja ajaa sen loppuun, sitten toistaa. Mikään ei keskeytä ajossa olevaa callbackia, joten pitkä CPU-työ estää kaiken.
[event loop] → aja callback → I/O valmistuu → laita callback jonoon → aja seuraava → ...
