深入浅析Node事件循环中的微任务队列.docx

深入浅析Node事件循环中的微任务队列.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

深入浅析Node事件循环中的微任务队列

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()时,要明智一些。

实验表明,用户编写的所有

文档评论(0)

158****9170 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档