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


Posted in Javascript onMarch 21, 2016

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的使用方法有所帮助。

Javascript 相关文章推荐
Js中sort()方法的用法
Nov 04 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
Nov 11 Javascript
firefox和IE系列的相关区别整理 以备后用
Dec 28 Javascript
用JavaScript实现页面重定向功能的教程
Jun 04 Javascript
javascript和jquery实现用户登录验证
May 04 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
Jun 03 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
Oct 27 Javascript
微信小程序开发探究
Dec 27 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
Apr 10 Javascript
基于JavaScript实现活动倒计时效果
Apr 20 Javascript
详解angular笔记路由之angular-router
Sep 12 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
May 18 Javascript
快速掌握Node.js事件驱动模型
Mar 21 #Javascript
快速掌握Node.js模块封装及使用
Mar 21 #Javascript
JS DOM实现鼠标滑动图片效果
Sep 17 #Javascript
实践中学习AngularJS表单
Mar 21 #Javascript
javascript单页面手势滑屏切换原理详解
Mar 21 #Javascript
javascript实现dom元素可拖动
Mar 21 #Javascript
AngularJS 中的指令实践开发指南(一)
Mar 20 #Javascript
You might like
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
基于Zend的Captcha机制的应用
2013/05/02 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
transform python环境快速配置方法
2018/09/27 Python
django创建超级用户过程解析
2019/09/18 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
我的网上商城创业计划书
2013/12/26 职场文书
母亲节感恩寄语
2014/02/21 职场文书
一年级小学生评语
2014/04/22 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
利用Python实时获取steam特惠游戏数据
2022/06/25 Python
Python+pyaudio实现音频控制示例详解
2022/07/23 Python