快速掌握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 相关文章推荐
JavaScript 匿名函数(anonymous function)与闭包(closure)
Oct 04 Javascript
UI Events 用户界面事件
Jun 27 Javascript
给jQuery方法添加回调函数一款插件的应用
Jan 21 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
jQuery代码实现表格中点击相应行变色功能
May 09 Javascript
Node.js调试技术总结分享
Mar 12 Javascript
JavaScript中清空数组的三种方式
Mar 22 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
May 14 Javascript
微信小程序实时聊天WebSocket
Jul 05 Javascript
浅谈Angularjs中不同类型的双向数据绑定
Jul 16 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
Mar 31 Javascript
公众号SVG动画交互实战代码
May 31 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
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
ECMAScript 创建自己的js类库
2012/11/22 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
node.js超时timeout详解
2014/11/26 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
js实现可爱的气泡特效
2020/09/05 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
深入Python解释器理解Python中的字节码
2015/04/01 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
Python决策树分类算法学习
2017/12/22 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
Oracle性能调优原则
2012/05/03 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
机械工程师求职自我评价
2013/09/23 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
银行催款通知书
2015/04/17 职场文书
开除通知书范本
2015/04/25 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
工作时间证明
2015/06/15 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android