Como se explica en las guías oficiales ( https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#setimmediate-vs-settimeout ), si ejecuto el siguiente fragmento, obtengo un orden diferente para registros, a veces immediate primero y a veces tiempo de timeout primero, es decir, el orden no es determinista :
setImmediate(() => { console.log("immediate"); }); setTimeout(() => { console.log("timeout"); }, 0);Producción:
> node index.js immediate timeout > node index.js immediate timeout > node index.js timeout immediate Sin embargo, si agrego la llamada a process.nextTick() a la mezcla, inesperadamente, se corrige el orden de tiempo de timeout e immediate (el tiempo de timeout siempre se imprime antes de immediate ):
setImmediate(() => { console.log("immediate"); }); setTimeout(() => { console.log("timeout"); }, 0); process.nextTick(() => { console.log("next tick"); });Producción:
> node index.js next tick timeout immediate > node index.js next tick timeout immediate > node index.js next tick timeout immediate No pude entender cómo process.nextTick() afecta el orden de tiempo de timeout e immediate . ¿Puede alguien ayudarme a entender lo que está sucediendo internamente aquí?