在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,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. 使用C#代码生成一个随机的UUID

    在日常开发中常见于生成主键的ID,比较规范好用,详细代码如下(写注释是个好习惯): using System;using System.Collections.Generic;using System ...

  2. ASP.NET Core模块概述

    原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...

  3. angular的$filter服务

    首先,介绍下$filter服务: 1.$filter是用来进行数据格式化的专用服务: 2.AngularJS内置了currency.date.filter.json.limitTo.lowercase ...

  4. nginx反向代理下thinkphp、php获取不到正确的外网ip

    在记录用户发送短信需要获取用户ip时,tp一直获取的是内网ip:10.10.10.10 tp框架获取ip方法:get_client_ip /** * 获取客户端IP地址 * @param intege ...

  5. nw.js自定义最小化图标的click事件

    选择frameless时,最小化和关闭按钮的点击事件需要自己来做,办法是: /* * 下面两个模块一定要引入到js文件中 */ var gui = require('nw.gui'); var win ...

  6. js拖拽

  7. SVG入门

    这部分包括三个内容: 1. 基本图形 2. 基本属性 3. 基础操作API 基本图形 名称 描述 参数 图示 rect 定义一个矩形 x="矩形的左上角的x轴" y="矩 ...

  8. 初识JAVA(二)(送给Java和安卓初学者)----常见错误

    博主接着上篇的来讲哦,以后的更新中,博主会出一些练习题,有兴趣的可以做做然后吧代码粘贴到下面,大家可以一起研究学习,一起进步,本篇文章主要讲的是: 一.常见错误 二.连接上篇一起的训练 无论是什么方向 ...

  9. iOS加密方式及解压缩文件

    Base64加密方式 Base64是一种加密方法,可逆的加密. Base64中的可打印字符包括字母A-Z.a-z.数字0-9,这样共有62个字符./ + 填充 = echo -n BC|base64 ...

  10. SegmentControl 那些令人烦恼的事儿

    每个人的曾经都很苦逼.我知道我很卑微,但我不曾放慢脚步,在这条路上至死不悔.愿与你同行. UISegmentControl 概述 UISegmentControl 是系统的段选择控件,具有简洁大方的外 ...