在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,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中的定时器详解的更多相关文章

  1. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

  2. STM32F103的11个定时器详解(转)

    源:STM32F103的11个定时器详解 STM32F103系列的单片机一共有11个定时器,其中:2个高级定时器4个普通定时器2个基本定时器2个看门狗定时器1个系统嘀嗒定时器 出去看门狗定时器和系统滴 ...

  3. JDK中Unsafe类详解

    Java中Unsafe类详解 在openjdk8下看Unsafe源码 浅析Java中的原子操作 Java并发编程之LockSupport http://hg.openjdk.java.net/jdk7 ...

  4. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  5. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  6. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

  7. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  8. oracle中imp命令详解 .

    转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

  9. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

随机推荐

  1. 来份ASP.NET Core尝尝

    0x01.前言 学习ASP.NET Core也有一段时间了,虽说很多内容知识点还是处于一知半解的状态,但是基本的,还是 略懂一二.如果有错误,还望见谅. 本文还是和之前一样,Demo+在Linux下运 ...

  2. react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置

    参考:http://www.lcode.org/react-native/ React native中文网:http://reactnative.cn/docs/0.23/android-setup. ...

  3. springboot 学习资源推荐

    springboot 是什么?对于构建生产就绪的Spring应用程序有一个看法. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.(这是springboot的官方介绍) 我们为什么要学 ...

  4. 数据仓库开发——Kettle使用示例

    Kettle是一个开园ETL工具,做数据仓库用Spoon. 工具:下载Spoon,解压即可用   1.认识常用组件:     表输入     插入\更新     数据同步     文本文件输出     ...

  5. Oracle SQL性能优化

    (1)      选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table) ...

  6. bootstrap的栅格布局与两列布局结合使用

    在工作中我们常常需要实现响应式布局,这个可以使用bootstrap的栅格系统来实现,我们在列里也需要实现一部分的响应式.比如下面的效果图,需要实现左边图标固定,右边的自适应 : 左边固定宽度,右边自适 ...

  7. datagrid与webAPI的数据交互(ef mvc )

    datagride自带分页工具,当使用分页工具的时候,初始化datagride或者带数据提交到API里面时,会以Json对象的形式将数据传递到API控制器里面,当没有过滤条件或者请求参数.和提交参数的 ...

  8. jquery获取ul中的第一个li

    $("ul li:first"); $("ul li").eq(0);$("ul li").first();$("ul li&qu ...

  9. JavaScript简单分页,兼容IE6,~3KB

    简介 兼容IE6+及现代浏览器的简单分页,支持同一页面多个分页. 使用 Browser <link rel="stylesheet" href="css/GB-pa ...

  10. Web Mercator Non-Conformal, Non-Mercator

    public static void XYtoGL(Coordinate coordinate) { double R = 6378137; coordinate.x = coordinate.x / ...