- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)