首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Promise 为什么会先于 setTimeout 执行

本期前端小知识介绍的是关于异步的内容,为什么 promise 会先于 setTimeout 执行

小知识

我们先来考虑下以下代码,你认为 log 的顺序是什么,如果你点击了页面会发送什么?

对于 JS 来说,代码执行永远是同步的,异步是依靠浏览器来做的。在执行 这个方法的时候即使你点击了页面,也并不会 出东西。因为这时候 JS 的执行栈还有代码在执行,并不能响应异步操作。然后当 函数执行完成以后,你会惊奇的发现 先于其他 出来了。对于浏览器来说,在处理异步的时候有好几个队列, 是放在一个 Microtask 队列中的。其他几个虽然也存储在不同的队列,但是本质是相同的。 浏览器有一个 Event Loop 在循环检查执行栈是否为空,为空时就丢异步代码进去。Microtask 队列中的任务会在每次 Event Loop 循环结束之前执行。而其他队列中的任务会在每次开始新的 Event Loop 时执行。所以 会先于其他几个异步任务执行。

结尾

如果你看了文章有任何的问题,都可以留言提问,我都会一一答复。

前端小知识,每天学一点。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180118G102ED00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券