Promise里的代码为什么比setTimeout先执行?

2019-04-30  本文已影响0人  我性本傲

因为Promise产生的是JavaScript引擎内部的微任务,而setTimeout是浏览器API,它产生宏任务。

我们把宿主发起的任务称为宏观任务,把 JavaScript引擎发起的任务称为微观任务。许多的微观任务的队列组成了宏观任务。

宏观任务队列与微观任务队列

ES6标准中任务队列存在两种类型:

宏观任务(marcotask):

setTimeout,setInterval

requestAnimationFrame

解析HTML

执行主线程js代码

修改url

页面加载

用户交互

微观任务(mircotask):

promise

mutation.oberver

process.nextTick

ES6添加了微观任务队列之后在执行栈执行的过程中会把属于微观任务队列的任务分配到相应的微观任务队列中去。而在调用栈执行空之后,主线程读取任务队列时,会先读取所有微观任务队列,然后读取一个宏观任务队列,再读取所有的微观任务队列。

注意:sync 函数强大之处在于,它是可以嵌套的。

上一篇 下一篇

猜你喜欢

热点阅读