DAY8: process.nextTick( )

今天的介绍的也是属於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");

执行结果:

https://ithelp.ithome.com.tw/upload/images/20210920/20140244l0owFyrbPu.jpg

是的!在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);

执行结果:

https://ithelp.ithome.com.tw/upload/images/20210920/20140244niBsuOTLSK.jpg

从结果可以看到,先执行完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");

执行结果:

https://ithelp.ithome.com.tw/upload/images/20210920/20140244yWNhKxbeTw.jpg

从结果可以看到第三个process.nextTick()要执行的回调被阻塞住了,
是因为第二个process.nextTick()发生了阻塞无法跳脱。就像水槽被堵住了,那麽我再倒东西进去依然流不下去。

结论:
若nextTick回调方法发生阻塞了,那麽後面伫列中的回调也都会因此阻塞。


<<:  当你真心渴望某件事,整个宇宙都会联合起来帮助你完成。

>>:  Day05 - 开始、结束与有限状态机

JavaScript Day 17. 认识物件

前面说了几篇阵列以及阵列方法,今天终於要讲到跟阵列息息相关的「物件」了。物件包含着一个以上的属性与值...

DAY 13 - 时钟怪 (2)

大家好~ 我是五岁~ 今天来继续把昨天未上色的时钟怪完成吧~!! 首先把昨天的成品做些微调 接下来就...

一辈子被雷打中的机率也被我遇到了

最喜欢的是窗外清晨时的一望无际的雪白,心灵就像被大自然安抚,获得平静 今天来聊聊那近三年空服生涯中...

Day17 - this&Object Prototypes Ch3 Objects - Iteration 开头

var myArr = ['燃面', '生菜', '花椒']; myArr.a = '雉鸡'; //...

16. PHPer x Composer x PSR

今天是讲座笔记,内容来自 PHP也有Day #60 composer & vite ,建议...