问题描述
setTimeout(()=>{
console.log('setTimeout')
})
new Promise((resolove , reject)=>{
resolove("resolove")
}).then(ret=>{
console.log('then======')
})
为什么 setTimeout会后执行呢???
setTimeout(()=>{
console.log('setTimeout')
})
new Promise((resolove , reject)=>{
resolove("resolove")
}).then(ret=>{
console.log('then======')
})
为什么 setTimeout会后执行呢???
promise 会把待执行的任务放在 microtask queue ,而 setTimeout 使用的是 task queue 。当两个队列的任务都准备好可以执行的时候,microtaks queue 中的任务会优先得到执行的机会。
但是不同的浏览器貌似处理还不一样 ....
同一个eventloop中,代码执行顺序依次为:同步代码 -> microtask queue -> task queue;
这里promise构造函数中的代码属于同步代码;promise回调中的代码属于microtask queue;setTimeout回调中的代码属于task queue;
所以就有了以上执行顺序。
想要了解细节,可以预先了解下event loop机制。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
这是前端js中的事件循环机制,你可以看下这篇文章,比较详细的介绍了
setTimeout
和Promise
的关系前端中的事件循环eventloop机制-蚊子的博客