快速掌握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 判断 enter 事件
Feb 12 Javascript
javascript showModalDialog模态对话框使用说明
Dec 31 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
Aug 18 Javascript
IE中getElementsByName()对有些元素无效的解决方案
Sep 28 Javascript
javascript事件冒泡和事件捕获详解
May 26 Javascript
Vue computed计算属性的使用方法
Jul 14 Javascript
详解AngularJS 过滤器的使用
Jun 02 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
Vue绑定内联样式问题
Oct 17 Javascript
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
vue实现codemirror代码编辑器中的SQL代码格式化功能
Aug 27 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
Jan 16 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 curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
js自动生成对象的属性示例代码
2013/10/28 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
jquery密码强度校验
2015/12/02 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
微信小程序如何实现在线客服功能
2019/10/16 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
python使用心得之获得github代码库列表
2014/06/25 Python
Python实现全局变量的两个解决方法
2014/07/03 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
python  logging日志打印过程解析
2019/10/22 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
Python列表操作方法详解
2020/02/09 Python
Python @property及getter setter原理详解
2020/03/31 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
2015年母亲节寄语
2015/03/23 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
电影复兴之路观后感
2015/06/02 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL