process.nextTick()与promise.then()

process.nextTick(function(){
    console.log(7);
});

new Promise(function(resolve){
    console.log(3);
    resolve();
    console.log(4);
}).then(function(){
    console.log(5);
});

process.nextTick(function(){
    console.log(8);
});

这段代码运行结果是3,4,7,8,5
process.nextTick和Promise都是Microtasks,为什么process.nextTick会先执行?

阅读 15.2k
1 个回答

之前看过的一个帖子,分享给你。

process.nextTick 永远大于 promise.then,原因其实很简单。。。在Node中,_tickCallback在每一次执行完TaskQueue中的一个任务后被调用,而这个_tickCallback中实质上干了两件事:

1.nextTickQueue中所有任务执行掉(长度最大1e4,Node版本v6.9.1)

2.第一步执行完后执行_runMicrotasks函数,执行microtask中的部分(promise.then注册的回调)

所以很明显 process.nextTick > promise.then

作者:何幻
链接:https://www.zhihu.com/questio...
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

推荐问题
宣传栏