Js(一 Event-Loop)

宏任务:

setTimeout
I/O
setInterval
setImmediate
主线程
MessageChannel

微任务:

Promise 系列 .then .catch .finally
process.nexttick
MutationObserver

console.log(1)

setTimeout(() => {
  console.log(8)
}, 2000)

setTimeout(() => {
  console.log(3)
  Promise.resolve().then(() => {
    console.log(4)
  })
  setTimeout(() => {
    console.log(6)
  }, 3000)
}, 1000)

new Promise((resolve, reject) => {
  console.log(5)
  resolve()
}).then(() => {
  console.log(7)
})

console.log(2)

结果:1 - 5 - 2 - 7 - 3 - 4 - 8 - 6
解释:微任务优先级大于宏任务,newPromise不属于微任务会立刻执行,主线程执行完打印152,微任务执行打印7,第一个宏任务执行打印3,出现一个微任务打印4,没有其他微任务了,出现一个宏任务,打印8,没有其他微任务,执行最后一个宏任务,打印6

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

推荐阅读更多精彩内容

  • 单线程 js是单线程是众所周知的事情,那么为什么js会被设计成单线程呢。因为如果js为多线程的话。如果一个线程在读...
    Super曲江龙Kimi阅读 373评论 2 1
  • javascript中的Event-Loop 在之前的一篇文章中我们解释了一下为什么JavaScript要设计成单...
    贝程学院_前端阅读 304评论 0 7
  • node.js事件循环 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。Nod...
    markfork阅读 1,412评论 0 5
  • 原文出自:https://www.pandashen.com 浏览器中的事件轮询 JavaScript 是一门单线...
    PandaShen阅读 1,475评论 0 3
  • 前言 js是一个单线程的语言(非阻塞),最初的目的是为了和浏览器交互,也就是事件的输入输出流,计算机根据人类的指令...
    扬子拉虫阅读 569评论 0 1