首頁  >  文章  >  web前端  >  快速掌握Node.js中setTimeout和setInterval的使用方法

快速掌握Node.js中setTimeout和setInterval的使用方法

高洛峰
高洛峰原創
2017-02-08 15:54:261282瀏覽

Node.js和js一樣也有計時器,超時計時器、間隔計時器、及時計時器,它們以及process.nextTick(callback)函數來實現事件調度。今天先學習setTimeout和setInterval的使用。

一、setTimeout超時計時器(和GCD中的after類似)

在node.js中可以使用node.js內建的setTimeout(callback,delayMillSeconds,[args])方法。當呼叫setTime()時回呼函數會在delayMillSeconds後

執行.setTime() 會傳回一個定時器物件ID,可以在delayMillSeconds到期前將ID傳給clearTimeout(timeoutId)來取消。

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);這行註解之後可以看到是會執行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間隔計時器(和GCD中的dispatch_source_t或NSTimer類似)

間隔計時器用來按定期的時間間隔來執行工作.和setTimeout類似,node.js中內建計時器,[args])來建立並傳回定時器物件Id,透過clearInterval()來取消。

/**
 * 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);

上面程式碼是建立setInterval的回呼函數myfunc,參數為Interval,setInterval每隔1s執行一次,setTimeout是在5秒之後執行,它的回呼函數讓間隔計時器取消。

"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

三、從事件循環中取消定時器引用

當事件隊列中僅存在定時器回調函數時,如果不希望再執行它們,可以使用setInterval和setTimeout返回對象的unref()函數來通知事件循環不要繼續。

當unref()和setTimeout結合使用,要用獨立計時器來喚醒事件循環,大量使用對效能也會產生影響,應盡量少用。

四、setTimeout和setInterval執行時間是不精確的

它們是間隔一定時間將回調添加到事件隊列中,執行也不是太精確

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");

   

不一樣的。

"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

以上就是本文的全部內容,希望對大家學習Node.js中setTimeout和setInterval的使用方法有所幫助。

更多快速掌握Node.js中setTimeout和setInterval的使用方法相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn