为什么事件循环中微任务队列中promise的回调优先于process.nextTick的回调?

问题描述 投票:0回答:1

我正在学习 Node.js 事件循环的工作原理。我了解到,在 Node.js 中运行异步代码时,微任务队列始终具有最高优先级

微任务队列由

nextTick
队列和
Promise
队列组成。所以,在微任务队列中,我的理解是,
nextTick
队列中的回调总是在
Promise
队列中的回调之前处理。

但是,当我运行以下代码时:

process.nextTick(() => console.log("this is process.nextTick 1"));
Promise.resolve().then(() => console.log("this is Promise.resolve 1"));

即使我交换代码行,这也是我总是得到的输出。我正在 Windows 计算机上的本地 Node.js (

v20.10.0
) 项目中运行它。

this is Promise.resolve 1
this is process.nextTick 1

结果与我对微任务队列如何确定回调优先级的理解相矛盾。看起来

Promise
队列的优先级高于
nextTick
队列。

有人可以解释一下这是怎么回事吗?当我在线搜索时,我发现

nextTick
队列的优先级高于
Promise
队列。

这是我要详细了解事件循环的博客文章。

https://www.builder.io/blog/NodeJS-visualizing-nextTick-and-promise-queues#experiment-2

截图只是为了表明我这次是诚实的 XD:

enter image description here

node.js event-loop
1个回答
0
投票

Weldone 老板们,解决方案非常简单明了,但在我们深入讨论解决方案之前...... 我写了一篇关于此的文章,这是链接

https://www.linkedin.com/posts/ashimolowo-riliwan-ridwan-02bb56176_developers-backendengineer-fullstackengineering-activity-7252369559523934210-ILHp?utm_source=share&utm_medium=member_android

您需要做的就是确认您的节点环境并确保它位于 commonJs 环境中,但如果您需要更多见解,我可以引导您逐步完成它

© www.soinside.com 2019 - 2024. All rights reserved.