快速掌握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实现控制内容的向上向下滚动效果
Jun 26 Javascript
js的表单操作 简单计算器
Dec 29 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
May 07 Javascript
window.navigate 与 window.location.href 的使用区别介绍
Sep 21 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
Feb 16 Javascript
简述Matlab中size()函数的用法
Mar 20 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
Jun 24 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
Aug 06 Javascript
Vue2几种常见开局方式详解
Sep 09 Javascript
AngularJS基于MVC的复杂操作实例讲解
Dec 31 Javascript
Vue指令实现OutClick的示例
Nov 16 Javascript
vue前端工程的搭建
Mar 31 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
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
PHP7多线程搭建教程
2017/04/21 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
实例教学如何写vue插件
2017/11/30 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
成品仓管员岗位职责
2013/12/11 职场文书
自我评价如何写好?
2014/01/05 职场文书
个人收入证明范本
2014/01/12 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
2015年国庆节慰问信
2015/03/23 职场文书
2015年大学生实习评语
2015/03/25 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android