In den offiziellen Websites von NodeJS (https://nodejs.org/api/timers.html#timers_setimmediate_callback_arg) aufgerufen wird, wird gesagt, dass:setImmediate() Funktion nach Funktion setTimeout()
setImmediate() Funktion Pläne "sofort" Durchführung von Rückruf nach I/Es werden die Rückrufe von O-Ereignissen und vor den von setTimeout gesetzten Timern und setInterval ausgelöst.
Im folgenden Code jedoch setTimeout() -Funktion vor setImmediate() ausgeführt. Warum?
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)
Ergebnis:
TIMEOUT FIRED 1 4 2 3 5 6
Ich schreibe ein weiteres Beispiel, und setTimeout
Werke vor setImmediate
auch hier.
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)
Output:
TIMEOUT-1 FIRED TIMEOUT-2 FIRED TIMEOUT-1 FIRED TIMEOUT-2 FIRED 1 2 3
In Node 5.6.0 für die erste, die ich '1 4 TIMEOUT 2 3 5 6' – Pointy
FIRED erhalten @metis, welche Version von node.js sind Sie verwenden, da es scheint, ein Bug mit einigen älteren Versionen: https://github.com/nodejs/node-v0.x-archive/issues/6034 –
v.4.4.5 es ist empfohlene Version für die meisten Benutzer auf der Willkommensseite von nodejs – metis