加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 智能机器人、大数据、CDN、图像分析、语音技术!
当前位置: 首页 > 教程 > 正文

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

发布时间:2023-09-06 11:00:42 所属栏目:教程 来源:转载
导读:   这篇文章主要介绍“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() 时,要明智一些。
 

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章