Node事件循环中的微任务队列是什么
//index.js console.log("console.log1"); process.nextTick(()=> console.log("thisisprocess.nextTick1")); console.log("console.log2");
这段代码,记录了三个不同的语句。第二个语句使用 process.nextTick()
将回调函数排入 nextTick 队列。
可视化
console.log1 console.log2 thisisprocess.nextTick1
推论
所有用户编写的同步 JavaScript 代码优先于异步代码执行。
让我们继续进行第二个实验。
实验二
代码
//index.js Promise.resolve().then(()=> console.log("thisisPromise.resolve1")); process.nextTick(()=> console.log("thisisprocess.nextTick1"));
我们有一个 Promise.resolve().then() 调用和一个 process.nextTick() 调用。
可视化
thisisprocess.nextTick1 thisisPromise.resolve1
推论
nextTick 队列中的所有回调函数优先于 Promise 队列中的回调函数执行。
让我带你走一遍上述第二个实验的更详细版本。
福利实验
代码
//index.js process.nextTick(()=> console.log("thisisprocess.nextTick1")); process.nextTick(()=> { console.log("thisisprocess.nextTick2"); process.nextTick(()=> console.log("thisistheinnernexttickinsidenexttick") ); } ); process.nextTick(()=> console.log("thisisprocess.nextTick3")); Promise.resolve().then(()=> console.log("thisisPromise.resolve1")); Promise.resolve().then(()=> { console.log("thisisPromise.resolve2"); process.nextTick(()=> console.log("thisistheinnernexttickinsidePromisethenblock") ); } ); Promise.resolve().then(()=> console.log("thisisPromise.resolve3"));
该代码包含三个 process.nextTick()
调用和三个 Promise.resolve()
调用语句。每个回调函数记录适当的消息。
但是,第二个 process.nextTick()
和第二个 Promise.resolve()
都有一个额外的 process.nextTick()
语句,每个都带有一个回调函数。
可视化
thisisprocess.nextTick1 thisisprocess.nextTick2 thisisprocess.nextTick3 thisistheinnernexttickinsidenexttick thisisPromise.resolve1 thisisPromise.resolve2 thisisPromise.resolve3 thisistheinnernexttickinsidePromisethenblock
这可能是一个稍微高级的实验,但推论仍然相同。
推论
nextTick 队列中的所有回调函数优先于 Promise 队列中的回调函数执行。
使用 process.nextTick()
时要小心。过度使用此方法可能会导致事件循环饥饿,从而阻止队列中的其余部分运行。当存在大量的 nextTick() 调用时,I/O 队列是无法执行自己的回调函数的。官方文档建议使用 process.nextTick()
的两个主要场景:处理错误或在调用栈为空事件循环继续之前执行回调用。所以在使用 process.nextTick()
时,要明智一些。
到此,关于“Node事件循环中的微任务队列是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Node事件循环中的微任务队列是什么
本文地址: https://pptw.com/jishu/6526.html