总结

  1. macro-task包括:script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering。

  2. micro-task包括:process.nextTick, Promises, Object.observe, MutationObserver

总的来说就是:

  1. 不同的任务会放进不同的任务队列之中。

  2. 先执行macro-task,等到函数调用栈清空之后再执行所有在队列之中的micro-task。

  3. 等到所有micro-task执行完之后再从macro-task中的一个任务队列开始执行,就这样一直循环。

  4. 当有多个macro-task(micro-task)队列时,事件循环的顺序是按上文macro-task(micro-task)的分类中书写的顺序执行的。

先执行正常栈中的代码,在执行micro-task,然后是macro-task.

也就是set开头的最后执行,promise在set之前,promise方法里的第一个执行方法不入栈,在正常栈里执行

console.log('golb1');
setImmediate(function() {
console.log('immediate1');
process.nextTick(function() {
console.log('immediate1_nextTick');
})
new Promise(function(resolve) {
console.log('immediate1_promise');
resolve();
}).then(function() {
console.log('immediate1_then')
})
})
setTimeout(function() {
console.log('timeout1');
process.nextTick(function() {
console.log('timeout1_nextTick');
})
new Promise(function(resolve) {
console.log('timeout1_promise');
resolve();
}).then(function() {
console.log('timeout1_then')
})
setTimeout(function() {
console.log('timeout1_timeout1');
process.nextTick(function() {
console.log('timeout1_timeout1_nextTick');
})
setImmediate(function() {
console.log('timeout1_setImmediate1');
})
});
})
new Promise(function(resolve) {
console.log('glob1_promise');
resolve();
}).then(function() {
console.log('glob1_then')
})
process.nextTick(function() {
console.log('glob1_nextTick');
})

上面的代码要在node环境里执行,

结果如下:

golb1
glob1_promise
glob1_nextTick
glob1_then
timeout1
timeout1_promise
timeout1_nextTick
timeout1_then
immediate1
immediate1_promise
immediate1_nextTick
immediate1_then
timeout1_timeout1
timeout1_timeout1_nextTick
timeout1_setImmediate1

最新文章

  1. Kafka资源汇总
  2. Hibernate多对一(注解)
  3. java代码和spring框架读取xml和properties文件
  4. 更改OneDrive同步文件夹
  5. bat 批处理 字符串 截取
  6. Asp.Net MVC--Controller激活2
  7. Android常用第三方框架
  8. n数码问题, 全排列哈希
  9. Jquery中dialog属性小记
  10. angular 数据加载动画 longding
  11. 安装JDK+Tomcat,进行环境变量设置,和运行JSP
  12. 使用CSS设置滚动条样式以及如何去掉滚动条的方法
  13. 【CERC2016】【BZOJ4792】村庄 搜索
  14. [心得] SQL Server Partition(表分區) 資料分佈探討
  15. PHP 框架实现原理
  16. SpringCloudConfig配置中心git库以及refresh刷新
  17. html如何引用另一个html的内容
  18. 【爬坑】python3+pyqt5+pyinstaller 打包成exe的各种问题
  19. spring cloud 入门系列:总结
  20. grunt入门讲解6:grunt使用步骤和总结

热门文章

  1. Python简单邮件发送源码
  2. javascript中的replace()方法
  3. CF 1097D Makoto and a Blackboard
  4. code1319 玩具装箱
  5. strtotime()
  6. [SoapUI] 比较两个不同环境下XML格式的Response, 结果不同时设置Test Step的执行状态为失败
  7. es学习-重建索引
  8. 移动端H5页面如何屏蔽双击缩放的功能?(转)
  9. CodeForces 540C Ice Cave (BFS)
  10. 三)EasyUI layout