Node事件循环中的微任务队列是什么
这篇文章主要介绍“Node事件循环中的微任务队列是什么”,在日常操作中,相信很多人在Node事件循环中的微任务队列是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node事件循环中的微任务队列是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
// index.jsconsole.log("console.log 1");process.nextTick(() => console.log("this is process.nextTick 1"));console.log("console.log 2");
这段代码,记录了三个不同的语句。第二个语句使用 process.nextTick()
将回调函数排入 nextTick 队列。
可视化
console.log 1console.log 2this is process.nextTick 1
推论
所有用户编写的同步 JavaScript 代码优先于异步代码执行。
让我们继续进行第二个实验。
实验二
代码
// index.jsPromise.resolve().then(() => console.log("this is Promise.resolve 1"));process.nextTick(() => console.log("this is process.nextTick 1"));
我们有一个 Promise.resolve().then() 调用和一个 process.nextTick() 调用。
可视化
this is process.nextTick 1this is Promise.resolve 1
推论
nextTick 队列中的所有回调函数优先于 Promise 队列中的回调函数执行。
让我带你走一遍上述第二个实验的更详细版本。
福利实验
代码
// index.jsprocess.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()
语句,每个都带有一个回调函数。
可视化
this is process.nextTick 1this is process.nextTick 2this is process.nextTick 3this is the inner next tick inside next tickthis is Promise.resolve 1this is Promise.resolve 2this is Promise.resolve 3this is the inner next tick inside Promise then block
这可能是一个稍微高级的实验,但推论仍然相同。
推论
nextTick 队列中的所有回调函数优先于 Promise 队列中的回调函数执行。
使用 process.nextTick()
时要小心。过度使用此方法可能会导致事件循环饥饿,从而阻止队列中的其余部分运行。当存在大量的 nextTick() 调用时,I/O 队列是无法执行自己的回调函数的。官方文档建议使用 process.nextTick()
的两个主要场景:处理错误或在调用栈为空事件循环继续之前执行回调用。所以在使用 process.nextTick()
时,要明智一些。
到此,关于“Node事件循环中的微任务队列是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341