快速掌握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 相关文章推荐
用jQuery技术实现Tab页界面之二
Sep 21 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
Feb 13 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
Dec 10 Javascript
JS的参数传递示例介绍
Feb 08 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
Dec 19 Javascript
JavaScript中字符串(string)转json的2种方法
Jun 25 Javascript
jQuery+Ajax实现无刷新分页
Oct 30 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
Feb 20 Javascript
javascript模块化简单解析
Apr 07 Javascript
简单实现jQuery级联菜单
Jan 09 Javascript
JavaScript中in和hasOwnProperty区别详解
Aug 04 Javascript
js使用generator函数同步执行ajax任务
Sep 05 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
php 图片上传类代码
2009/07/17 PHP
解析ajax事件的调用顺序
2013/06/17 PHP
php使用curl发送json格式数据实例
2013/12/17 PHP
php实现的递归提成方案实例
2015/11/14 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
javascript multibox 全选
2009/03/22 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
python实现在windows服务中新建进程的方法
2015/06/30 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
python打开使用的方法
2019/09/30 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
详解anaconda安装步骤
2020/11/23 Python
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
中学生获奖感言
2014/02/04 职场文书
教师求职信
2014/06/17 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
介绍信怎么写
2015/05/05 职场文书
个人业务学习心得体会
2016/01/25 职场文书