javascript运行时环境有一个事件循环、回调队列和微任务队列。微任务队列中的函数优先于回调队列中的函数(用于推入调用堆栈)。
从web返回的函数,如fetch (它返回一个承诺),被推送到微任务队列,而从web返回的函数,当setTimeout被推到回调队列时。因此,fetch承诺返回的函数将在setTimeout之前执行。
我的怀疑是,控制台也是一个web,对吗?现在,如果我们只是想让控制台记录一些东西,那么console web将返回结果,从技术上讲,这个结果应该首先存储在回调队列中。
因此,在这里我们可以看到,一个简单的控制台日志的优先级应该低于fetch (因为返回的fetch函数存储在microtask队列中,而控制台存储在回调队列中)。
因此,理论上,从fetch返回的函数应该在一个简单的控制台日志之前执行,但实际上,结果是相反的。那我错过了什么?请有人澄清我的疑虑。
发布于 2022-09-25 00:32:17
看看这个片段
setTimeout(() => console.log('ASYNC'))
Promise.resolve().then(() => console.log('PROMISE')) // also microtask
queueMicrotask(() => console.log('MICROTASK'))
console.log('SYNC')
https://stackoverflow.com/questions/73841348
复制相似问题