El process.nextTick es una feature de NodeJS muy útil y importante de saber acerca de su funcionamiento.
¡Cierto! ¿Pero, qué es él?
En NodeJS, cada iteración del Event Loop es conocida como un tick. Entonces, el process.nextTick ejecutará una función de callback cuando la iteración actual esté completado.
El process.nextTick no es parte de ninguna parte del Event Loop, en vez de eso, procesará los callbacks programados después de la iteración actual y antes de la seguinte.
Vamos a un ejemplo:
process.nextTick(() => console.log('ejecutaré en la iteración seguinte'))
console.log('estoy ejecutando en la iteración actual')
Si lo ejecutamos, tenemos este resultado:
estoy ejecutando en la iteración actual
ejecutaré en la iteración seguinte
Ahora, un ejemplo un poco mas complejo.
const server = net.createServer(() => {}).listen(8080);
server.on('listening', () => {});
Yo iré crear una estructura similar a esta, creada utilizando el modulo http del Node.
class FakeHttpServer extends EventEmitter {
createServer () {
return this
}
listen (port) {
this.emit('listening', port)
}
}
const http = new FakeHttpServer()
http
.createServer()
.listen(3000)
http.on('listening', console.log)
Ahora, vamos ejecutar este código y ver que él producirá.
No tenemos nada, nuestro console.log no fue llamado.
Pero, ¿Por qué? El evento está siendo emitido, mas no conseguimos capturar él.
Esto acontece, por que la función listen es completada de forma imediata y síncrona, pero nuestro listener ni fue ejecutado en este momento.
En casos así, el process.nextTick es muy útil.
class FakeHttpServer extends EventEmitter {
...
listen (port) {
...
process.nextTick(() => this.emit('listening', port))
}
}
Ahora estamos usando el process.nextTick para programar la emisión del evento para la iteración seguinte del event loop.
Si ejecutamos el código, tenemos la seguinte salida:
3000
Esta es la porta que pasamos para la función listen. La conseguimos logar agora, por que el código fuera procesado completamente, entonces cuando llegar la iteración seguinte del event loop, el listener ya terá sido ejecutado anteriormente.
El process.nextTick es muy útil cuándo precisamos programar una tarea para ser procesada después que todo el código restante ya esté completado
Top comments (0)