Node事件循环中的微任务队列指的是什么
发布时间:2023-09-06 11:00:37 所属栏目:教程 来源:转载
导读: 这篇文章主要介绍“Node事件循环中的微任务队列是什么”,在日常操作中,相信很多人在Node事件循环中的微任务队列是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用
这篇文章主要介绍“Node事件循环中的微任务队列是什么”,在日常操作中,相信很多人在Node事件循环中的微任务队列是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node事件循环中的微任务队列是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! // index.js console.log("console.log 1"); process.nextTick(() => console.log("this is process.nextTick 1")); console.log("console.log 2"); 这段代码,记录了三个不同的语句。第二个语句使用 process.nextTick() 将回调函数排入 nextTick 队列。 可视化 Node事件循环中的微任务队列是什么 console.log 1 console.log 2 this is process.nextTick 1 推论 所有用户编写的同步 JavaScript 代码优先于异步代码执行。 让我们继续进行第二个实验。 实验二 代码 // index.js Promise.resolve().then(() => console.log("this is Promise.resolve 1")); process.nextTick(() => console.log("this is process.nextTick 1")); 我们有一个 Promise.resolve().then() 调用和一个 process.nextTick() 调用。 可视化 Node事件循环中的微任务队列是什么 this is process.nextTick 1 this is Promise.resolve 1 推论 nextTick 队列中的所有回调函数优先于 Promise 队列中的回调函数执行。 让我带你走一遍上述第二个实验的更详细版本。 福利实验 代码 // index.js process.nextTick(() => console.log("this is process.nextTick 1")); process.nextTick(() => { console.log("this is process.nextTick 2"); process.nextTick(() => console.log("this is the inner next tick inside next tick") ); }); process.nextTick(() => console.log("this is process.nextTick 3")); Promise.resolve().then(() => console.log("this is Promise.resolve 1")); Promise.resolve().then(() => { console.log("this is Promise.resolve 2"); process.nextTick(() => console.log("this is the inner next tick inside Promise then block") ); }); Promise.resolve().then(() => console.log("this is Promise.resolve 3")); 该代码包含三个 process.nextTick() 调用和三个 Promise.resolve() 调用语句。每个回调函数记录适当的消息。 但是,第二个 process.nextTick() 和第二个 Promise.resolve() 都有一个额外的 process.nextTick() 语句,每个都带有一个回调函数。 可视化 Node事件循环中的微任务队列是什么 this is process.nextTick 1 this is process.nextTick 2 this is process.nextTick 3 this is the inner next tick inside next tick this is Promise.resolve 1 this is Promise.resolve 2 this is Promise.resolve 3 this is the inner next tick inside Promise then block 这可能是一个稍微高级的实验,但推论仍然相同。 推论 nextTick 队列中的所有回调函数优先于 Promise 队列中的回调函数执行。 使用 process.nextTick() 时要小心。过度使用此方法可能会导致事件循环饥饿,从而阻止队列中的其余部分运行。当存在大量的 nextTick() 调用时,I/O 队列是无法执行自己的回调函数的。官方文档建议使用 process.nextTick() 的两个主要场景:处理错误或在调用栈为空事件循环继续之前执行回调用。所以在使用 process.nextTick() 时,要明智一些。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐