const bar = () => console.log('bar')
const baz = () => console.log('baz')
const foo = () => {
console.log('foo')
setTimeout(bar, 0)
new Promise((resolve, reject) =>
resolve('应该在 baz 之后、bar 之前')
).then(resolve => console.log(resolve))
baz()
}
foo()
setTimeout()调用时,浏览器或Node.js会启用定时器,定时器到达截止时间(例子中是0),会将回调函数存入“消息队列”,也可以理解为一个子任务。而promise异步调用,则会在当前工作队列(即baz())结束之后,立刻执行。
也可理解为三个优先级是:
一般函数>promise回调> setTimeout()
本文通过一个具体的JavaScript示例解释了不同异步机制的执行顺序。包括setTimeout与Promise的工作方式及它们之间的区别。
169万+

被折叠的 条评论
为什么被折叠?



