关于process.nextTick和setImmediate区别的问题。

在看深入浅出nodejs定时器的内容时,看到这样的一段代码
clipboard.png
运行了一下,输出如下:

clipboard.png
好像跟想象的不太一样??查了一下好像‘强势插入’应该在‘setImmediate延迟执行1’和‘setImmediate延迟执行2’之间输出才对。

阅读 3.4k
2 个回答

我的理解:
首先,process.nextTick 的优先级比 setImmediate 高。
其次,总是先按照优先级执行已存在的定时器方法,然后按照优先级执行异步回调中的定时器方法。
最后,异步回调藏的越深,优先级就要降一层。

测试代码:

process.nextTick(function(){
    console.log('1');
});
process.nextTick(function(){
    console.log('2');
});

setImmediate(function(){
    console.log('3');
    setImmediate(function() {
        console.log('4');
        process.nextTick(function(){
            console.log('5');
            process.nextTick(function(){
                console.log('6');
            });
        });
    });
    process.nextTick(function(){
        console.log('7');
    });
});
process.nextTick(function(){
    console.log('8');
});
setImmediate(function(){
    console.log('9');
    process.nextTick(function(){
        console.log('10');
    });
});
console.log('0');

验证输出:

0
1
2
8
3
9
7
10
4
5
6
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题