nodejs事件循环的疑问

代码如下所示,第一层的输出顺序1 7 6 8没有疑问,主要是两个setTimeout内部的执行顺序:

console.log('1');

setTimeout(function() {
  console.log('2');
  process.nextTick(function() {
    console.log('3');
  })
  new Promise(function(resolve) {
    console.log('4');
    resolve();
  }).then(function() {
    console.log('5')
  })
})
process.nextTick(function() {
  console.log('6');
})
new Promise(function(resolve) {
  console.log('7');
  resolve();
}).then(function() {
  console.log('8')
})

setTimeout(function() {
  console.log('9');
  process.nextTick(function() {
    console.log('10');
  })
  new Promise(function(resolve) {
    console.log('11');
    resolve();
  }).then(function() {
    console.log('12')
  })
})

现在的输出顺序有2种:

clipboard.png

但是node.js v12.7.0中测试很多次貌似只有一种输出顺序

1
7
6
8
2
4
3
5
9
11
10
12

有没有大佬能解释下啊,网上的各种讲事件循环的都是看得云里雾里。

阅读 1.7k
1 个回答

因为node v11有个prnodejs的行为改成和浏览器一致。
原来的行为是,micortask执行完后,有timer到期执行完所有到期timer
现在的行为是,执行一个。

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