當前位置:
首頁 > 知識 > node.js-定时器

node.js-定时器


点击上方蓝字关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

在日常的工作中,我们时不时碰到一些这样的需求,例如几秒钟实现网页的跳转,几分钟对后台数据进行一次处理,node和JavaScript都具有将代码延迟一段时间的能力,这里我们专门讲讲node,在node中,可以使用三种方式实现定时功能:1、超时时间;2、时间间隔;3、即时定时器。在平常使用中, 这三者还是有差别的,下面我们一个一个来看。

node.js-定时器

全文的实例部分,我们会用到一个停止时间函数sleep,它的实现也很简单:

node.js-定时器


一、setTimeout与setInterval

setTimout:属于超时定时器,将任务延迟到一个特定的时间,当时间到了,回调函数执行,定时器就消失。它有两种用法,如下图所示:

node.js-定时器

这段代码第一种用法输出a b。第二种用法不输出,因为clearTimeout清除了定时器对象。

setInterval:属于时间间隔定时器,按照定期的延时时间间隔执行工作,当延迟时间结束,回调函数被执行,等回调函数执行结束后,再次重新调度该时间为延时间,循环往复。它也有两种用法,如下图所示:

node.js-定时器

这段代码第一种用法输出aaabbb,同样第二段代码不输出,因为我们使用了clearInterval清除了定时对象。

注意的是:setInterval一定是等到回调函数执行完成后,再进行下一次延时间定义。比如:


setInterval(function(){ sleep(5000); },1000)

这个程序,输出结果是这样的:

node.js-定时器

从结果可以看出,是每隔6秒钟才输出的。

二、ref与unref

上面可以看出,setTimeout方法与setInterval函数均返回一个定时器对象。然而,在Node.js中,为定时器对象定义了一个unref方法与一个ref方法。他们的作用也很简单,当使用setTimeout函数指定过多少毫秒调用某个回调函数或使用setInterval函数指定每隔多少毫秒调用某个回调函数后,可以使用setTimeout函数或者setInterval函数返回定时器对象的unref方法停止setTimeout函数或setInterval函数中指定的回调函数的调用(相反,ref方法就是启动)。

下面举一个例子:

node.js-定时器

上面这个代码存储在index.js文件中,我们在控制台运行node index.js,等待两秒后,就会看到输出:“等2秒后,输出信息”。本来,一开始就应该输出信息的,因为我们用了unref方法停止了setTimeout函数的回调函数的调用,紧接着我们用了一个sleep函数将程序停止了2秒,之后,调用ref启动setTimeout函数回调函数调用。

这两个方法需要注意的是:1、当调用两个或者两个以上的setTimeout的时候,这两个方法就不会起作用。2、这两个方法是node.js的方法,一定在node环境下运行,否则会报"is not a function"的错误。


三、setImmediate与process.nextTick

setImmediate:即时计时器,指任何超时时间或者间隔时间事件被执行之前,立即执行工作,相当于setTimeout的时间为0,可以传参数但时间不能设置,只能时间一直为0的效果。用法和上面定时器一样,如下图所示:

node.js-定时器

process.nextTick:主线程完成之后对列的第一个执行,setTimeout,setInterval,setImmediate都是在运行的队列中。下面我们相较于setlmmediate方法,来看一下两者的区别:

node.js-定时器

上面代码的输出顺序是"输出一","输出二","输出三dd;bb"。


四、最后总结

关于node.js定时器模块,官网有更详细的介绍,理解起来也并不难,总的来说,内容就这些,在应用的时候需要理解的更深一点,回头我在写node.js实例的时候,涉及到定时任务,在详细一点。

以上纯属个人理解,如有不对的地方,请留言交流!!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 小郑搞码事 的精彩文章:

TAG:小郑搞码事 |

您可能感興趣

log4js-node配置
Node.js之express框架
基於 node.js 的自動路由組件-HttpPostman
搭建nginx+nodejs伺服器
blogfoster-scripts:一款簡化 Node.js 項目初始化的工具
nodejs+mongodb 編寫 restful 風格博客 api
Node.js進階:cluster模塊深入剖析
DOM探索之-DOM的nodeType、nodeName、nodeValue
Shader Graph著色器視圖自定義節點API:Code Function Node
node整合webstorm
Windows系統下如何搭建Node.js伺服器詳解
拒絕 Python、C 和 Go,我只用 Node.js!
拒絕 Python、C#和Go,我只用 Node.js!
node+express+mongoDB寫簡單介面,Vue獲取介面
Node.js應用Linux部署實戰
Node.js 主題周
詳解node + mongoDb(mongoDb安裝、運行,在node中連接增刪改查)
node+pm2+express+mysql+sequelize來搭建網站和寫介面
川崎病:小兒皮膚黏膜淋巴結綜合征(mucocutaneous lymph node syndrome,MCLS)
nodejs連接mongodb,對數據增刪改查操作(跳過坑)Windows版