今天的介绍的也是属於Node的基础。
process.nextTick 依照Node官网的解说,事实上它并非事件循环的一部份,但process.nextTick的回调方法是由事件循环所调用
。process.nextTick所属名为nextTickQueue的伫列,在任一阶段,只要nextTickQueue不是空的,会在当下的阶段结束後,优先执行里面的回调函数完後事件循环再接续执行後续的程序。
简单来说,process.nextTick是个异步的行为,而这个"行为"在当下的阶段结束後才会执行这个"行为"的动作。
例子:
//process.nextTcik
process.nextTick(()=>
{
console.log("Hello!! I'm Nicole!! I'm NO.1 ")
},);
console.log("GoodBye!! Nicole!! I'm NO.2");
执行结果:
是的!在process.nextTick()
中要输出的语句放在回调中执行,故先输出log
的语句。
OK!我就喜欢多多尝试一些不一样的东西,那如果现在有多个process.nextTick()
,
那麽谁会被先执行谁又会在後面呢?
例子:
//多个process.nextTcik
process.nextTick(()=>
{
console.log("Hello!! I'm Nicole!! I'm NO.1 ");
},);
process.nextTick(()=>
{
console.log("Nice to meet you,Nicole!! I'm NO.2 ");
});
process.nextTick(()=>
{
console.log("I love you,Nicole!! I'm NO.3 ");
});
console.log("GoodBye!! Nicole!! I'm NO.4);
执行结果:
从结果可以看到,先执行完log
後,接着执行process.nextTick()
,
而第一个印出的是"Hello!! I'm Nicole!! I'm NO.1" ,第二个是"Nice to meet you,Nicole!! I'm NO.2",
第三个是"I love you,Nicole!! I'm NO.3"。
而输出的顺序也是如此,这就是伫列的特性。
总之process.nextTick()
先进入的回调会先被执行,这个特性也就是FIFO。
利用上面的例子,我在第二个process.nextTick()
中,让它发生无限循环(阻塞),
看看执行结果:
//阻塞的process.nextTcik
process.nextTick(()=>
{
console.log("Hello!! I'm Nicole!! I'm NO.1 ");
},);
process.nextTick(()=>
{
console.log("Nice to meet you,Nicole!! I'm NO.2 ");
while(true){} //出现无限循环!!!
});
process.nextTick(()=>
{
console.log("I love you,Nicole!! I'm NO.3 ");
});
console.log("GoodBye!! Nicole!! I'm NO.4");
执行结果:
从结果可以看到第三个process.nextTick()
要执行的回调被阻塞住了,
是因为第二个process.nextTick()
发生了阻塞无法跳脱。就像水槽被堵住了,那麽我再倒东西进去依然流不下去。
结论:
若nextTick回调方法发生阻塞了,那麽後面伫列中的回调也都会因此阻塞。
<<: 当你真心渴望某件事,整个宇宙都会联合起来帮助你完成。
前面说了几篇阵列以及阵列方法,今天终於要讲到跟阵列息息相关的「物件」了。物件包含着一个以上的属性与值...
大家好~ 我是五岁~ 今天来继续把昨天未上色的时钟怪完成吧~!! 首先把昨天的成品做些微调 接下来就...
最喜欢的是窗外清晨时的一望无际的雪白,心灵就像被大自然安抚,获得平静 今天来聊聊那近三年空服生涯中...
var myArr = ['燃面', '生菜', '花椒']; myArr.a = '雉鸡'; //...
今天是讲座笔记,内容来自 PHP也有Day #60 composer & vite ,建议...