快速掌握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定时器设定时间执行动作
Apr 02 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
Oct 29 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
Sep 05 Javascript
javascript按位非运算符的使用方法
Nov 14 Javascript
node.js中的fs.linkSync方法使用说明
Dec 15 Javascript
javascript实现表格增删改操作实例详解
May 15 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
Jul 18 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
Sep 14 Javascript
深入分析javascript中console命令
Aug 14 Javascript
在网页中插入百度地图的步骤详解
Dec 02 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
Feb 01 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 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 各种应用乱码问题的解决方法
2010/05/09 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
执行iframe中的javascript方法
2008/10/07 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
一步步教你用Python实现2048小游戏
2017/01/19 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
用python与文件进行交互的方法
2018/03/01 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
树莓派升级python的具体步骤
2020/07/05 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
军训心得体会
2013/12/31 职场文书
魅力教师事迹材料
2014/01/10 职场文书
好人好事事迹材料
2014/02/12 职场文书
财产公证书
2014/04/10 职场文书
宣传口号大全
2014/06/16 职场文书
中秋手机店促销方案
2014/06/16 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
员工辞职信怎么写
2015/02/27 职场文书
道士塔读书笔记
2015/06/30 职场文书
2016年教师节慰问信
2015/12/01 职场文书