Node中的定时器详解
在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,node与javascript都具有将代码延迟一段时间的能力。在node中可以使用三种方式实现定时功能:超时时间,时间间隔和即时定时器。虽然有这三种定时器功能但是在平常的业务中使用还是有差别的,下来我们就一起讨论一下这三种定时器。
1、用超时时间来延迟工作
超时定时器用于将工作延迟一个特定的时间数量,当时间到了,回调函数执行,而定时器会消失。(建议:对于只执行一次的工作,使用超时时间)。
1秒之后执行myFunc,函数
setTimeout(myFunc,1000);
当你调用setTimeout()时,回调函数myFunc会在1000毫秒之后执行。
2、时间间隔执行定期工作
时间间隔定时器用于按照定期的延时时间间隔执行工作,当延迟时间结束时,回调函数被执行,然后再次重新调度该时间为延时时间,相当于一个轮询功能,定期执行函数。
每秒中执行一次myFunc()
setInterval(myFunc,1000);
setInterval()函数会返回一个定时器对象ID,利用这个clearInterval(id)可以取消时间间隔定时器
例如:
id = setInterval(myFunc,1000);
clearInterval(id);
3、使用即时计时器立即执行工作
即时计时器用来在I/O事件的回调函数开始执行后,单任何超时间时间或者间隔时间事件被执行之前,立即执行工作。它们允许你把工作调度为在事件队列中的当前事件完成之后执行。
setImmediate(myFunc,1000);
代码调度myFunc()在遍历时间队列的下一个周期内执行。
注意:还有一个是nextTick来调度工作
在事件队列上调度工作的一个非常有用的办法就是使用process.nextTick(callback)函数,这个函数可能会导致I/O的饥饿,所以node通过设置默认值为1000的process.maxTickDepth来限制事件队列的每次循环可执行的nextTIck()的数目。
接下来写一个小的Demo来看看这几个定时器的一些区别。
console.log('成功开启node,端口号:'+app.get('port'));
setImmediate(function(){
console.log("setImmediate1");
},);
process.nextTick(function(){
console.log("nextTick1");
});
setImmediate(function(){
console.log("setImmediate2");
},);
process.nextTick(function(){
console.log("nextTick2");
});
console.log("---------------");
运行结果如下:
从上面的结果中可以看到,首先输出的是两个nextTick(),也就是说,这个函数在任何调用之前执行,之后是两个setImmediate()。这就好比是说,nextTick()函数提前进入了VIP仓,提前登机了~(哈哈~~这句比喻是在和大牛们的讨论中出来的,便于大家理解,要是有说的不清楚的地方,请大家批评指正。)
注:本文的参考资料来源是《Node.js+MongoDB+AngularJS Web开发》,作者:Brad Dayley ,卢涛 李颖 译,在此对本书的作者以及翻译者表示感谢。
Node中的定时器详解的更多相关文章
- 《Node.js开发实战详解》学习笔记
<Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...
- STM32F103的11个定时器详解(转)
源:STM32F103的11个定时器详解 STM32F103系列的单片机一共有11个定时器,其中:2个高级定时器4个普通定时器2个基本定时器2个看门狗定时器1个系统嘀嗒定时器 出去看门狗定时器和系统滴 ...
- JDK中Unsafe类详解
Java中Unsafe类详解 在openjdk8下看Unsafe源码 浅析Java中的原子操作 Java并发编程之LockSupport http://hg.openjdk.java.net/jdk7 ...
- php中关于引用(&)详解
php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
- 【转载】C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...
- oracle中imp命令详解 .
转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
随机推荐
- 来份ASP.NET Core尝尝
0x01.前言 学习ASP.NET Core也有一段时间了,虽说很多内容知识点还是处于一知半解的状态,但是基本的,还是 略懂一二.如果有错误,还望见谅. 本文还是和之前一样,Demo+在Linux下运 ...
- react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置
参考:http://www.lcode.org/react-native/ React native中文网:http://reactnative.cn/docs/0.23/android-setup. ...
- springboot 学习资源推荐
springboot 是什么?对于构建生产就绪的Spring应用程序有一个看法. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.(这是springboot的官方介绍) 我们为什么要学 ...
- 数据仓库开发——Kettle使用示例
Kettle是一个开园ETL工具,做数据仓库用Spoon. 工具:下载Spoon,解压即可用 1.认识常用组件: 表输入 插入\更新 数据同步 文本文件输出 ...
- Oracle SQL性能优化
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table) ...
- bootstrap的栅格布局与两列布局结合使用
在工作中我们常常需要实现响应式布局,这个可以使用bootstrap的栅格系统来实现,我们在列里也需要实现一部分的响应式.比如下面的效果图,需要实现左边图标固定,右边的自适应 : 左边固定宽度,右边自适 ...
- datagrid与webAPI的数据交互(ef mvc )
datagride自带分页工具,当使用分页工具的时候,初始化datagride或者带数据提交到API里面时,会以Json对象的形式将数据传递到API控制器里面,当没有过滤条件或者请求参数.和提交参数的 ...
- jquery获取ul中的第一个li
$("ul li:first"); $("ul li").eq(0);$("ul li").first();$("ul li&qu ...
- JavaScript简单分页,兼容IE6,~3KB
简介 兼容IE6+及现代浏览器的简单分页,支持同一页面多个分页. 使用 Browser <link rel="stylesheet" href="css/GB-pa ...
- Web Mercator Non-Conformal, Non-Mercator
public static void XYtoGL(Coordinate coordinate) { double R = 6378137; coordinate.x = coordinate.x / ...