setTimeout和setImmediate之间的优先级

etn*_*brd 9 javascript node.js

我在节点文档中读到了这个:

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");
Run Code Online (Sandbox Code Playgroud)

输出:

0 directCall
1 nextTick
2 setTimeout
3 setImmediate
Run Code Online (Sandbox Code Playgroud)

Fré*_*ATI 3

你应该检查这个github 问题

事件循环的周期是定时器 -> I/O -> 立即数、冲洗和重复。该文档是正确的但不完整:它没有提到当您尚未进入事件循环时(如您的示例中的情况),那么计时器首先出现 - 但仅在第一个滴答声中出现。(在 master 中。让事情变得复杂的是,v0.10 中的确定性稍差一些。)