快速掌握Node.js中setTimeout和setInterval的使用方法
Node.js和js一樣也有計(jì)時(shí)器,超時(shí)計(jì)時(shí)器、間隔計(jì)時(shí)器、及時(shí)計(jì)時(shí)器,它們以及process.nextTick(callback)函數(shù)來(lái)實(shí)現(xiàn)事件調(diào)度。今天先學(xué)下setTimeout和setInterval的使用。
一、setTimeout超時(shí)計(jì)時(shí)器(和GCD中的after類似)
在node.js中可以使用node.js內(nèi)置的setTimeout(callback,delayMillSeconds,[args])方法。當(dāng)調(diào)用setTime()時(shí)回調(diào)函數(shù)會(huì)在delayMillSeconds后
執(zhí)行.setTime() 會(huì)返回一個(gè)定時(shí)器對(duì)象ID,可以在delayMillSeconds到期前將ID傳給clearTimeout(timeoutId)來(lái)取消。
function myfunc(){
console.log("myfunc");
};
var mytimeout=setTimeout(myfunc,1000);
clearTimeout(mytimeout);
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe timer.js Process finished with exit code 0
如果將clearTimeout(mytimeout);這行注釋之后可以看到是會(huì)執(zhí)行myfunc()。
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe timer.js myfunc Process finished with exit code 0
二、setInterval間隔計(jì)時(shí)器(和GCD中的dispatch_source_t或NSTimer類似)
間隔計(jì)時(shí)器用來(lái)按定期的時(shí)間間隔來(lái)執(zhí)行工作.和setTimeout類似,node.js中內(nèi)置setInterval(callback,delayMilliSecond,[args])來(lái)創(chuàng)建并返回定時(shí)器對(duì)象Id,通過(guò)clearInterval()來(lái)取消。
/**
* Created by Administrator on 2016/3/11.
*/
function myfunc(Interval){
console.log("myfunc "+Interval);
}
var myInterval=setInterval(myfunc,1000,"Interval");
function stopInterval(){
clearTimeout(myInterval);
//myInterval.unref();
}
setTimeout(stopInterval,5000);
上面代碼是創(chuàng)建setInterval的回調(diào)函數(shù)myfunc,參數(shù)為Interval,setInterval每隔1s執(zhí)行一次,setTimeout是在5秒之后執(zhí)行,它的回調(diào)函數(shù)讓間隔計(jì)時(shí)器取消。
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Interval.js myfunc Interval myfunc Interval myfunc Interval myfunc Interval Process finished with exit code 0
三、從事件循環(huán)中取消定時(shí)器引用
當(dāng)事件隊(duì)列中僅存在定時(shí)器回調(diào)函數(shù)時(shí),如果不希望再執(zhí)行它們,可以使用setInterval和setTimeout返回對(duì)象的unref()函數(shù)來(lái)通知事件循環(huán)不要繼續(xù)。
當(dāng)unref()和setTimeout結(jié)合使用,要用獨(dú)立計(jì)時(shí)器來(lái)喚醒事件循環(huán),大量使用對(duì)性能也會(huì)產(chǎn)生影響,應(yīng)盡量少用。
四、setTimeout和setInterval執(zhí)行時(shí)間是不精確的
它們是間隔一定時(shí)間將回調(diào)添加到事件隊(duì)列中,執(zhí)行也不是太精確
function simpleTimeout(consoleTime)
{
console.timeEnd(consoleTime);
}
console.time("twoSecond");
setTimeout(simpleTimeout,2000,"twoSecond");
console.time("oneSecond");
setTimeout(simpleTimeout,1000,"oneSecond");
console.time("fiveSecond");
setTimeout(simpleTimeout,5000,"fiveSecond");
console.time("50MillSecond");
setTimeout(simpleTimeout,50,"50MillSecond");
以上代碼多執(zhí)行幾次輸出的結(jié)果也是不一樣的。
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe timer.js 50MillSecond: 51ms oneSecond: 1000ms twoSecond: 2002ms fiveSecond: 5001ms Process finished with exit code 0
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)Node.js中setTimeout和setInterval的使用方法有所幫助。
- JavaScript中關(guān)于for循環(huán)刪除數(shù)組元素內(nèi)容時(shí)出現(xiàn)的問(wèn)題
- JS for循環(huán)中i++ 和 ++i的區(qū)別介紹
- jQuery的Each比JS原生for循環(huán)性能慢很多的原因
- 淺談JavaScript for循環(huán) 閉包
- 全面解析JavaScript里的循環(huán)方法之forEach,for-in,for-of
- JavaScript中setTimeout和setInterval函數(shù)的傳參及調(diào)用
- JavaScript 定時(shí)器 SetTimeout之定時(shí)刷新窗口和關(guān)閉窗口(代碼超簡(jiǎn)單)
- for循環(huán) + setTimeout 結(jié)合一些示例(前端面試題)
相關(guān)文章
快速搭建Node.js(Express)用戶注冊(cè)、登錄以及授權(quán)的方法
這篇文章主要介紹了快速搭建Node.js(Express)用戶注冊(cè)、登錄以及授權(quán),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
從零學(xué)習(xí)node.js之詳解異步控制工具async(八)
sync是一個(gè)流程控制工具包,提供了直接而強(qiáng)大的異步功能。基于JavaScript為Node.js設(shè)計(jì),同時(shí)也可以直接在瀏覽器中使用。下面這篇文章主要介紹了node.js之異步控制工具async的相關(guān)資料,需要的朋友可以參考下。2017-02-02
Node事件的監(jiān)聽與觸發(fā)的實(shí)現(xiàn)
Node.js是由事件驅(qū)動(dòng)的,每個(gè)任務(wù)都可以當(dāng)作一個(gè)事件來(lái)處理,本文主要介紹了Node事件的監(jiān)聽與觸發(fā)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
如何自定義node版本,實(shí)現(xiàn)node多版本控制方式
這篇文章主要介紹了如何自定義node版本,實(shí)現(xiàn)node多版本控制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
nodejs一個(gè)簡(jiǎn)單的文件服務(wù)器的創(chuàng)建方法
這篇文章主要介紹了nodejs一個(gè)簡(jiǎn)單的文件服務(wù)器的創(chuàng)建方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Node.js基礎(chǔ)入門之回調(diào)函數(shù)及異步與同步詳解
Node.js是一個(gè)基于Chrome?V8引擎的JavaScript運(yùn)行時(shí)。類似于Java中的JRE,.Net中的CLR。本文將詳細(xì)為大家介紹Node.js中的回調(diào)函數(shù)及異步與同步,感興趣的可以了解一下2022-03-03

