理解 setImmediate()
Lorsque vous souhaitez exécuter un morceau de code de manière asynchrone, mais dès que possible, une option consiste à utiliser la fonction setImmediate()
fournie par Node.js :
JS
Toute fonction transmise comme argument setImmediate() est une fonction de rappel qui est exécutée lors de l'itération suivante de la boucle d'événement.
En quoi setImmediate()
est-il différent de setTimeout() => {}, 0)
(passage d'un délai de 0ms), et de process.nextTick()
et Promise.then()
?
Une fonction passée à process.nextTick()
va être exécutée à l'itération courante de la boucle d'événement, après la fin de l'opération courante. Cela signifie qu'elle sera toujours exécutée avant setTimeout
et setImmediate
.
Un callback setTimeout()
avec un délai de 0ms est très similaire à setImmediate()
. L'ordre d'exécution dépendra de divers facteurs, mais ils seront tous deux exécutés lors de l'itération suivante de la boucle d'événement.
Un callback process.nextTick
est ajouté à la queue process.nextTick
. Un callback Promise.then()
est ajouté à la queue promises microtask
. Un callback setTimeout
, setImmediate
est ajouté à la queue macrotask
.
La boucle d'événement exécute d'abord les tâches dans la file d'attente process.nextTick
, puis exécute la file d'attente promises microtask
, et enfin exécute la file d'attente macrotask
.
Voici un exemple pour montrer l'ordre entre setImmediate()
, process.nextTick()
et Promise.then()
:
Ce code va d'abord appeler start()
, puis appeler foo()
dans la file d'attente process.nextTick
. Après cela, il va gérer la file d'attente des microtâches promises
, qui imprime bar
et ajoute zoo()
dans la file d'attente process.nextTick
en même temps. Ensuite, il appellera zoo()
qui vient d'être ajouté. A la fin, le baz()
de la macrotask queue
est appelé.