一道输出题目

来源:5-10 -浏览器和nodejs事件循环(Event Loop)有什么区别-nodejs

慕莱坞9486019

2022-03-04

setImmediate(() => {
  console.log(1);
  Promise.resolve().then(() => {
    console.log(2);
  });
}, 0);
new Promise((resolve) => {
  console.log(3);
  resolve();
}).then(() => {
  console.log(4);
  process.nextTick(() => {
    console.log(5)
  });
  setTimeout(() => {
    console.log(6);
  }, 0);
}).then(() => {
  console.log(7);
});
console.log(8);

最近笔试题里遇到这道题

正确答案是3,8,4,7,5,1,2,6,我写的答案是把7和5的输出顺序写反了,请问双越老师,微任务里process.nextTick()的优先级不是更高么?为什么then的链式调用会先把7打印出来,在打印5,求教~

写回答

2回答

慕斯卡7246137

2022-03-16

我这边运行你的代码,输出的是3,8,4,7,5,6,1,2

0
1
小李今天学了吗
我这边运行也是
2022-06-27
共1条回复

双越

2022-03-04

如下图。A函数先被注册,而后 B 函数才被注册的。所以肯定 7 先输出。


//img.mukewang.com/szimg/622218f30938fd3a08841044.jpg

0
2
码上起飞
回复
内六角
因为process.nextTick是个微任务,会先添加到微任务队列里但不执行,只有等同步的代码执行完才会去清理微任务的队列
2022-05-31
共2条回复

2周刷完100道前端优质面试真题 双越最新力作

『前端面试真题100道』视频详解

1509 学习 · 642 问题

查看课程