快速掌握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 相关文章推荐
谷歌浏览器 insertCell与appendChild的区别
Feb 12 Javascript
jQuery 行级解析读取XML文件(附源码)
Oct 12 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
Apr 02 Javascript
JQuery给select添加/删除节点的实现代码
Apr 26 Javascript
微信小程序 开发之顶部导航栏实例代码
Feb 23 Javascript
Vue Ajax跨域请求实例详解
Jun 20 Javascript
JS获取子、父、兄节点方法小结
Aug 14 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
Sep 20 Javascript
JS+CSS实现滚动数字时钟效果
Dec 25 Javascript
three.js实现炫酷的全景3D重力感应
Dec 30 Javascript
Nuxt的动态路由和参数校验操作
Nov 09 Javascript
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
快速掌握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中文字母数字验证码实现代码
2008/04/25 PHP
php中如何防止表单的重复提交
2013/08/02 PHP
PHP里的单例类写法实例
2015/06/25 PHP
PHP会话操作之cookie用法分析
2016/09/28 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
vue实现简单图片上传
2020/06/30 Javascript
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
Python装饰器知识点补充
2018/05/28 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
numpy库reshape用法详解
2020/04/19 Python
什么是Python中的匿名函数
2020/06/02 Python
python爬虫要用到的库总结
2020/07/28 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
html5弹跳球示例代码
2013/07/23 HTML / CSS
人力资源部培训专员岗位职责
2014/01/02 职场文书
会计工作决心书
2014/03/11 职场文书
保证书格式范文
2014/04/28 职场文书
申论倡议书范文
2014/05/13 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
街道务虚会发言材料
2014/10/20 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
审美与表现自我评价
2015/03/09 职场文书
宇宙与人观后感
2015/06/05 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
PHP控制循环操作的时间
2021/04/01 PHP