Comprensione di setImmediate()
Comprendere setImmediate()
Quando vuoi eseguire un pezzo di codice in modo asincrono, ma il prima possibile, una opzione è utilizzare la funzione setImmediate()
fornita da Node.js:
Ogni funzione passata come argomento a setImmediate()
è un callback che viene eseguito nella successiva iterazione del ciclo degli eventi.
Come è diverso setImmediate()
da setTimeout(() => {}, 0)
(impostando un timeout di 0 ms) e da process.nextTick()
e Promise.then()
?
Una funzione passata a process.nextTick()
verrà eseguita nell’iterazione corrente del ciclo degli eventi, dopo che l’operazione corrente è terminata. Ciò significa che verrà sempre eseguita prima di setTimeout
e setImmediate
.
Un callback setTimeout()
con un ritardo di 0 ms è molto simile a setImmediate()
. L’ordine di esecuzione dipenderà da vari fattori, ma entrambi verranno eseguiti nella successiva iterazione del ciclo degli eventi.
Un callback di process.nextTick
viene aggiunto alla process.nextTick queue
. Un callback di Promise.then()
viene aggiunto alla promises microtask queue
. Un callback di setTimeout
, setImmediate
viene aggiunto alla macrotask queue
.
Il ciclo degli eventi esegue prima i compiti nella process.nextTick queue
, quindi esegue la promises microtask queue
e infine esegue la macrotask queue
.
Ecco un esempio per mostrare l’ordine tra setImmediate()
, process.nextTick()
e Promise.then()
:
Questo codice chiamerà prima start()
, quindi chiamerà foo()
nella process.nextTick queue
. Dopo ciò, gestirà la promises microtask queue
, che stamperà bar
e aggiungerà zoo()
nella process.nextTick queue
contemporaneamente. Successivamente chiamerà zoo()
che è stato appena aggiunto. Alla fine, verrà chiamato baz()
nella macrotask queue
.