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中內置setInterval(callback,delayMilliSecond,[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的使用方法有所幫助。