DEV Community

Cover image for ¿Que es el process.nextTick?
Lucas Eduardo
Lucas Eduardo

Posted on

¿Que es el process.nextTick?

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')
Enter fullscreen mode Exit fullscreen mode

Si lo ejecutamos, tenemos este resultado:

estoy ejecutando en la iteración actual
ejecutaré en la iteración seguinte
Enter fullscreen mode Exit fullscreen mode

Ahora, un ejemplo un poco mas complejo.

const server = net.createServer(() => {}).listen(8080);

server.on('listening', () => {});
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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))
  }
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)