當前位置:
首頁 > 最新 > node.js-定時器

node.js-定時器

在日常的工作中,我們時不時碰到一些這樣的需求,例如幾秒鐘實現網頁的跳轉,幾分鐘對後台數據進行一次處理,node和JavaScript都具有將代碼延遲一段時間的能力,這裡我們專門講講node,在node中,可以使用三種方式實現定時功能:1、超時時間;2、時間間隔;3、即時定時器。在平常使用中, 這三者還是有差別的,下面我們一個一個來看。

全文的實例部分,我們會用到一個停止時間函數sleep,它的實現也很簡單:

一、setTimeout與setInterval

setTimout:屬於超時定時器,將任務延遲到一個特定的時間,當時間到了,回調函數執行,定時器就消失。它有兩種用法,如下圖所示:

這段代碼第一種用法輸出a b。第二種用法不輸出,因為clearTimeout清除了定時器對象。

setInterval:屬於時間間隔定時器,按照定期的延時時間間隔執行工作,當延遲時間結束,回調函數被執行,等回調函數執行結束後,再次重新調度該時間為延時間,循環往複。它也有兩種用法,如下圖所示:

這段代碼第一種用法輸出aaabbb,同樣第二段代碼不輸出,因為我們使用了clearInterval清除了定時對象。

注意的是:setInterval一定是等到回調函數執行完成後,再進行下一次延時間定義。比如:

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

這個程序,輸出結果是這樣的:

從結果可以看出,是每隔6秒鐘才輸出的。

二、ref與unref

上面可以看出,setTimeout方法與setInterval函數均返回一個定時器對象。然而,在Node.js中,為定時器對象定義了一個unref方法與一個ref方法。他們的作用也很簡單,當使用setTimeout函數指定過多少毫秒調用某個回調函數或使用setInterval函數指定每隔多少毫秒調用某個回調函數後,可以使用setTimeout函數或者setInterval函數返回定時器對象的unref方法停止setTimeout函數或setInterval函數中指定的回調函數的調用(相反,ref方法就是啟動)。

下面舉一個例子:

上面這個代碼存儲在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的效果。用法和上面定時器一樣,如下圖所示:

process.nextTick:主線程完成之後對列的第一個執行,setTimeout,setInterval,setImmediate都是在運行的隊列中。下面我們相較於setlmmediate方法,來看一下兩者的區別:

上面代碼的輸出順序是"輸出一","輸出二","輸出三dd;bb"。

四、最後總結

關於node.js定時器模塊,官網有更詳細的介紹,理解起來也並不難,總的來說,內容就這些,在應用的時候需要理解的更深一點,回頭我在寫node.js實例的時候,涉及到定時任務,在詳細一點。

以上純屬個人理解,如有不對的地方,請留言交流!!


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

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


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

JavaScript中有一個比較火的技術叫事件委託
H5-這篇告訴你什麼是最佳適配方案
理解clip屬性及用它如何實現圖片載入環形loading效果
用一個bug搞懂什麼是JavaScript函數節流
H5-如何在項目中正確應用rem

TAG:小鄭搞碼事 |

您可能感興趣

log4js-node配置
Node.js之express框架
基於 node.js 的自動路由組件-HttpPostman
搭建nginx+nodejs伺服器
blogfoster-scripts:一款簡化 Node.js 項目初始化的工具
nodejs+mongodb 編寫 restful 風格博客 api
Node.js進階:cluster模塊深入剖析
Windows系統下如何搭建Node.js伺服器詳解
拒絕 Python、C#和Go,我只用 Node.js!
DOM探索之-DOM的nodeType、nodeName、nodeValue
拒絕 Python、C 和 Go,我只用 Node.js!
node整合webstorm
Shader Graph著色器視圖自定義節點API:Code Function Node
node+express+mongoDB寫簡單介面,Vue獲取介面
Node.js應用Linux部署實戰
node+pm2+express+mysql+sequelize來搭建網站和寫介面
Webpack 4.0.0 beta.0 發布,不再支持 Node.js 4
Node.js用戶想學Rust
Node.js 主題周
Electron 4.0 穩定版發布,集成 Node 10 和 Chromium 69