为了账号安全,请及时绑定邮箱和手机立即绑定

promise和setTimeout执行顺序的疑惑

promise和setTimeout执行顺序的疑惑

收到一只叮咚 2018-11-15 14:14:33
setTimeout(function () {    console.log(1)}, 0);new Promise(function executor(resolve) {        resolve();}).then(function () {    console.log(2);});如上代码,为什么运行结果是2,1而不是1,2?不是setTimeout先加入任务队列吗?
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

从规范上来讲,setTimeout有一个4ms的最短时间,也就是说不管你设定多少,反正最少都要间隔4ms才运行里面的回调(当然,浏览器有没有遵守这个规范是另外一回事儿)。而Promise的异步没有这个问题。

从具体实现上来说,这俩的异步队列不一样,Promise所在的那个异步队列优先级要高一些。
具体的你可以看这篇文章:从Promise来看JavaScript中的Event Loop、Tasks和Microtasks


查看完整回答
反对 回复 2018-12-22
  • 1 回答
  • 0 关注
  • 504 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信