observed setImmediate and setTimeout execution order contradicts documentation
-
Version:
v6.2.1
-
Platform:
Darwin
-
Subsystem:
timers
Documentation for setImmediate
:
Schedules "immediate" execution of callback after I/O events' callbacks and before timers set by setTimeout and setInterval are triggered.
Demonstration:
console.log("nodejs version", process.versions.node);
console.log("start");
setTimeout(() =>
{
console.log("setTimeout 0 callback");
}, 0);
setTimeout(() =>
{
console.log("setTimeout 1 callback");
}, 1);
setImmediate(() =>
{
console.log("setImmediate callback");
});
setTimeout(() =>
{
console.log("setTimeout 0 after setImmediate callback");
}, 0);
setTimeout(() =>
{
console.log("setTimeout 1 after setImmediate callback");
}, 1);
process.nextTick(() => {
console.log("nextTick callback");
});
console.log("scheduled");
Observed outputs:
$ node test.js
nodejs version 6.2.1
start
scheduled
nextTick callback
setTimeout 0 callback
setTimeout 1 callback
setImmediate callback
setTimeout 0 after setImmediate callback
setTimeout 1 after setImmediate callback
$ node test.js
nodejs version 6.2.1
start
scheduled
nextTick callback
setTimeout 0 callback
setTimeout 1 callback
setTimeout 0 after setImmediate callback
setTimeout 1 after setImmediate callback
setImmediate callback
Expected output:
$ node test.js
nodejs version 6.2.1
start
scheduled
nextTick callback
setImmediate callback
setTimeout 0 callback
setTimeout 1 callback
setTimeout 0 after setImmediate callback
setTimeout 1 after setImmediate callback