【发布时间】:2018-09-12 00:57:58
【问题描述】:
对于这个sn-p:
const foo = [1, 2];
const bar = ['a', 'b'];
foo.forEach( num => {
console.log(`setting setImmmediate ${num}`);
setImmediate(() => {
console.log(`running setImmediate ${num}`);
bar.forEach(char => {
console.log(`setting nextTick ${char}`);
process.nextTick(() => {
console.log(`running nextTick ${char}`);
})
})
});
} )
输出是
$ node scratch.js
setting setImmmediate 1
setting setImmmediate 2
running setImmediate 1
setting nextTick a
setting nextTick b
running setImmediate 2
setting nextTick a
setting nextTick b
running nextTick a
running nextTick b
running nextTick a
running nextTick b
来自docs
nextTickQueue 将在当前操作完成后处理,与事件循环的当前阶段无关。
据我了解,process.nextTick() 将添加到当前事件的nextTickQueue,并在当前事件之后立即执行,无论事件循环处于哪个阶段。
输出不应该是下面的吗?
setting setImmmediate 1
setting setImmmediate 2
running setImmediate 1
setting nextTick a
setting nextTick b
running nextTick a
running nextTick b
running setImmediate 2
setting nextTick a
setting nextTick b
running nextTick a
running nextTick b
【问题讨论】:
标签: node.js event-loop libuv