知识点:
刚接触js的时候,把js执行顺序划分为同步任务和异步任务两种,同步任务先执行完之后再去执行异步任务,然后遇到了setTimeout和promise同时出现在一段逻辑里的情况,setTimeout0明明是先推入event loop任务队列,promise.then()后推入任务队列,但是代码实际运行的结果是,promise.then()先输出结果,setTimeout后输出结果。网上查询了一些资料,发现有更细微的任务划分,这也解释了我一直的疑惑。
setTimeout(()=>{console.log(1)});
newPromise((resolve, reject)=>{console.log(2)}).then(console.log(3));
输出: 2 3 1
1、macro-task(宏任务): 包括整体script代码、setTimeout、setInternal。
2、micro-task(微任务): Promise process.nextTick()。
3、执行一个宏任务,过程中如果遇到微任务,就将其放到微任务的【事件队列】里
4、当前宏任务执行完成后,会查看微任务的【事件队列】,并将里面全部的微任务依次执行完(需要注意的是本轮宏任务执行完之后,会第一时间去执行本轮宏任务中的微任务,执行完成之后,再去执行下一轮宏任务。)
![](https://img.haomeiwen.com/i7549528/ec69ed28a4a5f16b.png)
网友评论