我在节点documentation上看到了这个:
setImmediate(callback,[arg],[...])
安排"立即"在I / O事件回调之后执行回调,在
之前执行setTimeout
和setInterval
然而,我看到相反的情况。
setTimeout
之前执行setImmediate
。
是否有人对此行为进行了表达,或者对节点事件循环有任何文档?
谢谢:)
代码:
var index = 0;
function test(name) {
console.log((index++) + " " + name);
}
setImmediate(function() {
test("setImmediate");
})
setTimeout(function() {
test("setTimeout");
}, 0);
process.nextTick(function() {
test("nextTick");
})
test("directCall");
输出:
0 directCall
1 nextTick
2 setTimeout
3 setImmediate
答案 0 :(得分:3)
您应该查看github issue
事件循环周期是定时器 - > I / O - >立即,冲洗和重复。 文档是正确但不完整的:它没有提到 当你还没有进入事件循环时(就像你的情况一样) 例子),然后计时器先到 - 但只在第一个刻度线上。 (在 主。更复杂的是,事情的确定性稍差 在v0.10。)