同步,异步,宏微任务,任务队列的顺序问题

Posted 晚星@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同步,异步,宏微任务,任务队列的顺序问题相关的知识,希望对你有一定的参考价值。

setTimeout(function() 
  console.log(1)
, 0);
new Promise(function(resolve, reject) 
  console.log(2);
  resolve()
).then(function() 
  console.log(3)
);
process.nextTick(function () 
  console.log(4)
)
console.log(5)

第一轮:主线程开始执行,遇到setTimeout,将setTimeout的回调函数丢到宏任务队列中,在往下执行new Promise立即执行,输出2,then的回调函数丢到微任务队列中,再继续执行,遇到process.nextTick,同样将回调函数扔到为任务队列,再继续执行,输出5,当所有同步任务执行完成后看有没有可以执行的微任务,发现有then函数和nextTick两个微任务,先执行哪个呢?process.nextTick指定的异步任务总是发生在所有异步任务之前,因此先执行process.nextTick输出4然后执行then函数输出3,第一轮执行结束。
第二轮:从宏任务队列开始,发现setTimeout回调,输出1执行完毕,因此结果是25431

以上是关于同步,异步,宏微任务,任务队列的顺序问题的主要内容,如果未能解决你的问题,请参考以下文章

js执行队列顺序

js同步异步执行顺序setTimeOut面试题分析

20230515学习笔记——js中的同步任务与异步任务,宏任务与微任务

setTimeout的异步传输机制

谈一谈你对js线程的理解

javascript事件环(EventLoop)