首页前端开发其他前端知识Node事件循环中的微任务队列是什么

Node事件循环中的微任务队列是什么

时间2023-04-23 18:12:01发布访客分类其他前端知识浏览619
导读:这篇文章主要介绍“Node事件循环中的微任务队列是什么”,在日常操作中,相信很多人在Node事件循环中的微任务队列是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node事件循环中的微任务队列是什么”的疑...
这篇文章主要介绍“Node事件循环中的微任务队列是什么”,在日常操作中,相信很多人在Node事件循环中的微任务队列是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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

若转载请注明出处: Node事件循环中的微任务队列是什么
本文地址: https://pptw.com/jishu/6526.html
JS正则表达式的使用方法是什么 域名批量查询工具有哪些

游客 回复需填写必要信息