请问以下JS代码在Node环境下的输出顺序是?

发布时间 2023-11-10 16:44:19作者: 龙陌

请问以下JS代码在Node环境下的输出顺序是?

Promise.resolve()
.then(() => {
  console.log('p1');
})
.then(() => {
  console.log('p2');
})
process.nextTick(() => {
  console.log('n1');
  process.nextTick(() => {
    console.log('n2');
  })
})

n1、n2、p1、p2

注意虽然两者都属于微任务,但是只要它不是process.nextTick派发的,全部都要排队在process.nextTick后面执行。

Node 中的“微任务(microtasks)其实是一个统称,包含了两部分:

process.nextTick() 注册的回调 (nextTick task queue)
promise.then() 注册的回调 (promise task queue)

Node 在执行微任务时, 会优先执行 nextTick task queue 中的任务,执行完之后会接着执行 promise task queue 中的任务。
所以如果 process.nextTick 的回调与 promise.then 的回调都处于主线程或事件循环中的同一阶段, process.nextTick 的回调要优先于 promise.then 的回调执行。

https://www.cnblogs.com/forcheng/p/12723854.html