Nei siti ufficiali di nodejs (https://nodejs.org/api/timers.html#timers_setimmediate_callback_arg), si dice che:setImmediate() viene chiamato dopo la funzione setTimeout()
setImmediate() orari delle funzioni di esecuzione "immediata" di callback dopo I/I callback di eventi O e i timer di prima impostati da setTimeout e setInterval vengono attivati.
Tuttavia nel codice seguente, la funzione setTimeout() eseguita prima di setImmediate(). Perché?
setImmediate(function A() {
setImmediate(function B() {
console.log(1);
setImmediate(function D() { console.log(2); });
setImmediate(function E() { console.log(3); });
});
setImmediate(function C() {
console.log(4);
setImmediate(function F() { console.log(5); });
setImmediate(function G() { console.log(6); });
});
});
setTimeout(function timeout() {
console.log('TIMEOUT FIRED');
}, 0)
Risultato:
TIMEOUT FIRED 1 4 2 3 5 6
scrivo un altro esempio, e setTimeout
opere prima setImmediate
anche qui.
setTimeout(function timeout() {
console.log('TIMEOUT-1 FIRED');
}, 0)
setTimeout(function timeout() {
console.log('TIMEOUT-2 FIRED');
}, 0)
setImmediate(function D() { console.log(1); });
setImmediate(function D() { console.log(2); });
setImmediate(function D() { console.log(3); });
setTimeout(function timeout() {
console.log('TIMEOUT-1 FIRED');
}, 0)
setTimeout(function timeout() {
console.log('TIMEOUT-2 FIRED');
}, 0)
uscita:
TIMEOUT-1 FIRED TIMEOUT-2 FIRED TIMEOUT-1 FIRED TIMEOUT-2 FIRED 1 2 3
In Nodo 5.6.0 per il primo ottengo '1 4 TIMEOUT LICENZIATO 2 3 5 6' – Pointy
@metis quale versione di node.js sono si utilizza come sembra esserci un bug con alcune versioni precedenti: https://github.com/nodejs/node-v0.x-archive/issues/6034 –
v.4.4.5 è la versione consigliata per la maggior parte degli utenti sul pagina di benvenuto di nodejs – metis