从process.nextTick(cb)/Promise说起,(js执行机制的再次理解)

上次写了对JS的执行机制的一些初步理解,分为同步任务和异步任务,task queue,event loop等。
然后我看到了这么一段代码:

setTimeout(function() {
    console.log('setTimeout');
})

new Promise(function(resolve) {
    console.log('promise');
    resolve()
}).then(function() {
    console.log('then');
})

console.log('console');

最后的输出结果是我不理解的:

// promise
// console
// then
// setTimeout

那就从这开始说起

对同步任务和异步任务更精细的分类: macro-task和micro-task

除了广义的同步任务和异步任务,我们对任务有更精细的定义:

  • macro-task(宏任务):包括整体代码script,setTimeout,setInterval
  • micro-task(微任务):Promise,process.nextTick

不同类型的任务会进入对应的Event Queue,比如setTimeout和setInterval会进入 macro-task队列。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近比较忙,硬是没抽出时间总结一点小知识。最近在网上看到一篇不错的文章,转一下!本文的目的就是要保证你彻底弄懂ja...
    殖民_FE阅读 1,943评论 1 2
  • 原文在这里说明: 我通过这篇文章第一次知道JavaScript运行机制中的任务队列有宏任务和微任务之分。 文中的代...
    楠小忎阅读 1,794评论 0 0
  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 7,657评论 0 5
  • 事件循环(evenloop) 事件循环机制是宿主环境提供的。js中处理异步,增加了任务队列的概念(你不知道的js中...
    209bd3bc6844阅读 7,926评论 0 1
  • 刚开始使用JS异步的时候,有这样的疑问:JS不是单线程的吗?为什么会有异步机制?但是如果没有异步机制,定时器又是怎...
    盛夏晚清风阅读 5,591评论 0 11