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的使用方法有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 外媒称PS5pro违背承诺:《蜘蛛侠2》根本没法4K60帧
- 令晴 Lynn《The Make》[320K/MP3][44.47MB]
- 令晴 Lynn《The Make》[Hi-Res][24bit 48kHz][FLAC/分轨][295.42MB]
- 雷婷《移情别恋HQⅡ》头版限量编号[低速原抓WAV+CUE][1G]
- FUNDAMENTAL.1989-感觉号渡轮【SONY】【WAV+CUE】
- 上山安娜.1986-上山安娜【EMI百代】【WAV+CUE】
- 张真.1993-失恋十四行【上华】【WAV+CUE】
- 钟明秋《爱有天意HQCD》[低速原抓WAV+CUE]
- 孙云岗唢呐《金声玉振[HIFI珍藏版]》[低速原抓WAV+CUE]
- 谭艳精讯TEST-CD试音39号》2CD[DTS-WAV]
- 姚璎格《发烧女中音》DSD版[低速原抓WAV+CUE][1G]
- 张玮伽《微风细雨DSD》发烧大碟[WAV+CUE][1.1G]
- 群星《2024好听新歌14》十倍音质 U盘音乐 [WAV分轨][966M]
- s14全球总决赛T1战队队员都有谁 LOLs14全球总决赛T1战队介绍
- 英雄联盟faker身价有10亿吗 英雄联盟faker身价介绍一览