Node中的定时器详解

    在多数的事体中,大家都会有部分须求,例如几分钟完毕网页的跳转,几分钟对于后台数据举行清理,node与javascript都富有将代码延迟一段时间的能力。在node中能够运用三种方法贯彻定时功效:超时时间,时间距离和即时定时器。即使有那两种定时器效率然而在平凡的事体中选取依然有反差的,下来大家就伙同探讨一下那二种定时器。

    1、用过期时间来贻误做事

    超时定时器用于将工作推迟3个特定的时日数额,当岁月到了,回调函数执行,而定时器会收敛。(建议:对于只进行一回的行事,使用过期时间)。

    壹秒未来执行myFunc,函数

    setTimeout(myFunc,1000);

    当你调用setTimeout()时,回调函数myFunc会在一千微秒之后执行。

    二、时间间隔执行期限工作

    时间间隔定时器用于依据定期的延时时间距离执行工作,当延迟时间停止时,回调函数被实践,然后重新重新调度该时间为延时时间,相当于一个轮询成效,定期执行函数。

    每秒中执行二回myFunc()

    setInterval(myFunc,1000);

    setInterval()函数会回到贰个定时器对象ID,利用那些clearInterval(id)可以收回时间距离定时器

    例如:

    id = setInterval(myFunc,1000);

    clearInterval(id);

    三、使用即时计时器霎时实施工作

    即时计时器用来在I/O事件的回调函数开头举办后,单任伊哈洛时间时间恐怕间隔时间事件被实施在此之前,立刻实施工作。它们允许你把工作调度为在事件队列中的当前事件做到之后执行。

    setImmediate(myFunc,1000);

    代码调度myFunc()在遍历时间连串的下1个周期内实施。

    注意:还有3个是nextTick来调度工作

    在事件队列上调度工作的3个格外实惠的措施正是利用process.nextTick(callback)函数,这一个函数只怕会导致I/O的饥饿,所以node通过设置暗中同意值为一千的process.maxTickDepth来界定事件队列的历次循环可举行的nextTIck()的多寡。

    接下去写三个小的德姆o来探视那多少个定时器的有的有别于。

    

 1 console.log('成功开启node,端口号:'+app.get('port'));
 2     setImmediate(function(){
 3         console.log("setImmediate1");
 4     },1000);
 5     process.nextTick(function(){
 6         console.log("nextTick1");
 7     });
 8     setImmediate(function(){
 9         console.log("setImmediate2");
10     },1000);
11     process.nextTick(function(){
12         console.log("nextTick2");
13     });
14     console.log("---------------");

    运维结果如下:

  图片 1

    从地点的结果中得以看出,首先输出的是多少个nextTick(),也正是说,这些函数在另向外调拨运输用在此以前实施,之后是八个setImmediate()。那就好比是说,nextTick()函数提前进入了VIP仓,提前登机了~(哈哈~~那句比喻是在和大腕们的座谈中出来的,便于大家领会,假若有说的不清楚的地点,请我们批评指正。)

    注:本文的参考资料来源是《Node.js+MongoDB+AngularJS
Web开发》,笔者:Brad Dayley ,卢涛  李颖
译,在此对本书的撰稿人以及翻译者表示感激。

    

    

    

 

相关文章