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

最新文章

  1. U-Boot GOT表分析和u-boot.lds解读
  2. spring-自动加载配置文件\使用属性文件注入
  3. 常用的 Android Studio 快捷键
  4. 10635 - Prince and Princess
  5. 一步步学习ASP.NET MVC3 (7)——Controller,Action,ActionResult
  6. Centos清理内存 内存回收释放及内存使用查看的相关命令
  7. 1104解决ecos挂件中数组传递的相关问题。
  8. QQ聊天界面的布局和设计(IOS篇)-第一季
  9. [转载]string转化大小写(C++)
  10. 《JavaScript权威指南》读书笔记2
  11. React入门实例
  12. 每天一个Linux命令(16)--which命令
  13. 【转】GPS静态观测网的设计指标
  14. Ubuntu14.04部署pyspider的过程
  15. 起底区块链人脸识别黑马,一个没有人像的人脸识别:iFace Chain(爱妃链)
  16. 【洛谷P1516】青蛙的约会
  17. CSS 书写规范
  18. module.js:549 throw err;
  19. 页面元素固定在页面底部的纯css代码(兼容IE6)
  20. kafka操作清单

热门文章

  1. 拒绝“高冷”词汇!初学C#中实用的泛型!
  2. telerik自定义皮肤的制作及用法
  3. IIS发布网站之后,页面图片和js未加载出错
  4. LinkedBlockingQueue源码解析(2)
  5. 【自动化专题】selenium如何轻松搞定文件上传
  6. jvm(1)类加载(一)(加载过程,双亲加载)
  7. Dynamic Type
  8. Java并发(一)-了解线程安全
  9. javascript数据结构与算法--二叉树遍历(后序)
  10. Python运行MapReducer程序时所遇异常