JS异步 Promise

问题描述

setTimeout(()=>{
         console.log('setTimeout')
})
new Promise((resolove , reject)=>{
         resolove("resolove")
   
}).then(ret=>{
      console.log('then======')
})

图片描述

为什么 setTimeout会后执行呢???

阅读 2.4k
3 个回答

一个有点老的文章。

promise 会把待执行的任务放在 microtask queue ,而 setTimeout 使用的是 task queue 。当两个队列的任务都准备好可以执行的时候,microtaks queue 中的任务会优先得到执行的机会。

但是不同的浏览器貌似处理还不一样 ....

同一个eventloop中,代码执行顺序依次为:同步代码 -> microtask queue -> task queue;
这里promise构造函数中的代码属于同步代码;promise回调中的代码属于microtask queue;setTimeout回调中的代码属于task queue;
所以就有了以上执行顺序。
想要了解细节,可以预先了解下event loop机制。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题