在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,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. 导出数据到Excel --使用ExcelReport有感

    先看图,这是几个月前用NPOI写的导出数据到Excel,用了上百行代码,而且难控制,导出来也比较难看 excel打开的效果 下面是我用ExcelReport类库导出到Excel的操作 1.首先引用Ex ...

  2. 《连载 | 物联网框架ServerSuperIO教程》- 3.设备驱动介绍

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  3. C#通过反射给对象赋值

    class Program { static void Main(string[] args) { UserSearchRequest model = new UserSearchRequest() ...

  4. 【项目管理】图解GitHub基本操作

    一.注册并登陆到github网站 1.1.打开github网站首页(https://github.com/) 1.2.注册一个自己的github账号 创建账户后再验证自己的邮箱,然后就可以登陆到git ...

  5. GridView的各种属性

    <GridView android:id="@+id/movie_list" android:layout_width="906dp" android:l ...

  6. iOS通知的整理笔记

    iOS通知用于高耦合界面的传值确实方便快捷. 需要实现模态弹出的视图控制器上,有一个视图控制器可以导航.这必定要将这个视图控制器的导航视图控制器naVC.view添加到模态弹出的视图控制器presen ...

  7. OC字符串基本操作

    不可变的字符串的修改方法有返回值(重新指向新的字符串地址) 可变的字符串的修改方法没有返回值(修改字符串本身) // NSString 不可变字符串 // 1.创建字符串对象 // 使用初始化方法创建 ...

  8. iOS App之间跳转

    1.先来看看效果,这里做了三个功能 从MyApp跳转到YourApp 从MyApp跳转到YourApp的指定页面 从YourApp使用跳转url的方式跳回MyApp 2.实现app之间的跳转需要注意两 ...

  9. Mac利用PD虚拟机安装Centos7

    一.PD虚拟机的安装1.Parallels Desktop ,简称PD,号称是Mac上最好用的虚拟机,具体的就在此不进行过多描述.下附Mac .app文件夹下载,下载后放入/Applications/ ...

  10. 树莓派:raspberry pi 3b - NOOBS

    NOOBS - 多操作系统安装器,可以将不同支持树莓派的流行操作系统安装在一张SD卡中并提供一个启动管理工具,安装的不同操作系统相互独立,互不影响,是一种比较有意思的玩法. 从版本1.3.1开始到1. ...