Javascript承诺执行setTimeout



我一直在玩Promises,但我很难理解以下代码发生了什么:

const promise = new Promise((resolve, reject) => {
console.log('Promise started')
resolve('Success')
})
setTimeout(() => {
console.log('Log inside first setTimeout')
}, 0)
promise.then(res => {
console.log('Promise log after fulfilled ❌')
})
setTimeout(() => {
console.log('Log inside second setTimeout')
}, 0)

输出为:

Promise started 
Promise log after fulfilled ❌ 
Log inside first setTimeout 
Log inside second setTimeout 

为什么不输出以下内容?

Promise started 
Log inside first setTimeout 
Log inside second setTimeout 
Promise log after fulfilled ❌ 

setTimeout(fn, 0)fn调用和resolve()fn调用之间,哪个将被赋予优先级

是否取决于浏览器实现的详细信息

setTimeout是一个宏任务-这些任务在包含Promises的微任务之后解决。setTimeout是非阻塞的,因此代码在第一个setTimeout之前执行(包括.then(,然后是第二个setTimeout

Promise具有更高的优先级,因为它们在微任务队列中排队。首先处理微任务队列中的任务。然后处理其他调度任务,在这种情况下为setTimeout

最新更新