Skip to content

Comprendre process.nextTick()

Lorsque vous essayez de comprendre la boucle d'événements de Node.js, une partie importante est process.nextTick(). Chaque fois que la boucle d'événements effectue un cycle complet, on appelle cela un tick.

Lorsque nous passons une fonction à process.nextTick(), nous demandons au moteur d'invoquer cette fonction à la fin de l'opération courante, avant le début du prochain tick de la boucle d'événements :

js
process.nextTick(() => {
  // faire quelque chose
})

La boucle d'événements est occupée à traiter le code de la fonction courante. Lorsque cette opération se termine, le moteur JS exécute toutes les fonctions passées aux appels nextTick pendant cette opération.

C'est la façon dont nous pouvons indiquer au moteur JS de traiter une fonction de manière asynchrone (après la fonction courante), mais le plus tôt possible, sans la mettre en file d'attente.

Appeler setTimeout(() => {}, 0) exécutera la fonction à la fin du prochain tick, beaucoup plus tard que lors de l'utilisation de nextTick(), qui priorise l'appel et l'exécute juste avant le début du prochain tick.

Utilisez nextTick() lorsque vous voulez vous assurer que le code est déjà exécuté lors de la prochaine itération de la boucle d'événements.

Un exemple de l'ordre des événements :

js
console.log('Hello => numéro 1')
setImmediate(() => {
  console.log('Exécution avant le timeout => numéro 3')
})
setTimeout(() => {
  console.log('Le timeout s’exécute en dernier => numéro 4')
}, 0)
process.nextTick(() => {
  console.log('Exécution au prochain tick => numéro 2')
})

Exemple de sortie :

bash
Hello => numéro 1
Exécution au prochain tick => numéro 2
Exécution avant le timeout => numéro 3
Le timeout s’exécute en dernier => numéro 4

La sortie exacte peut différer d'une exécution à l'autre.