为什么setTimeout在promise后执行
cirzear / / 面试知识 / 阅读量 388
  • 首先要知道,在 ES3 和更早的版本中,JavaScript 本身还没有异步执行代码的能力,只能由浏览器或宿主环境传递给JavaScript引擎一段任务,然后将其顺序执行。这就是宿主环境发起的任务。我们称其为宏观任务。
  • 在ES5之后,JavaScript引进了promise,使得JavaScript引擎可以自己发起执行任务,我们称其为微观任务。
  • 每次执行任务时我们可以理解为一个宏观任务,每次都是执行完一个宏观任务再执行下一个宏观任务,而promise在执行时会返回一个异步任务,这时候怎么办呢,JavaScript引擎要保证这些异步任务要在同一个宏观任务中执行,因此就出现了微观任务队列。
  • 有了这个机制,在执行任务时,JavaScript将promise产生的异步任务加入到宏观任务尾部的微观任务队列中,而setTimeout是由宿主发起的任务,自然就是一个宏观任务,因此排在了前一个宏观任务的后面执行。
  • 也就是说,正常情况下,promise.then中执行的任务一定会在setTimeout之前执行。
支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章