【Node.js】定时器

一、设置定时器

1. 一次性定时器

setTimeout(函数,间隔的时间):间隔一定时间后,只执行一次,之后不再执行。

// 基本用法 
setTimeout(callback, delay[, ...args])

// 示例
setTimeout(function(){
   console.log('我是一个一次性的定时器');
},1000);

2.周期性定时器

setInterval(函数,间隔的时间):每间隔一定时间执行一次,循环执行。

// 基本用法 
setInterval(callback, delay[, ...args])

// 示例
setInterval (function(){
   console.log('我是一个周期性的定时器');
},1000);

3.即时定时器

即时定时器:setImmediate():只要启动,马上执行。

// 基本用法 
setImmediate(callback[, ...args])

 二、取消定时器

分别用clearTimeout()、clearInterval()和clearImmediate()方法取消相应定时器,防止该定时器触发。  

var testInterval=setInterval(testFunc,2000);
  ...    
clearInterval(testInterval);

三、Timeout和Immediate类

  •  Node.js内置两个有关定时器的类Timeout和Immediate,可用于创建相应的对象。
  • Timeout对象在内部创建,并由setTimeout()或setInterval()方法返回,可以传递给clearTimeout()或clearInterval()以取消定时器。
  • Immediate对象也在内部创建,并由setImmediate()方法返回。它可以传递给clearImmediate()以取消即时定时器。

四、setImmediate()方法与setTimeout()方法的对比

程序代码 执行结果
在一个I/O周期(即主模块)内调用的比较

setTimeout(() => {

  console.log('一次性');

}, 0);

setImmediate(() => {

  console.log('即时性');

});

C:\nodeapp\ch02>node timeout_vs_immediate1.js

一次性

即时性

C:\nodeapp\ch02>node timeout_vs_immediate1.js

即时性

一次性

同一个I/O循环内调用的比较

const fs = require('fs'); fs.readFile(__filename, () => {

  setTimeout(() => {

    console.log('一次性');

  }, 0);  

setImmediate(() => {

    console.log('即时性');

  });

});

C:\nodeapp\ch02>node timeout_vs_immediate2.js

即时性

一次性

C:\nodeapp\ch02>node timeout_vs_immediate2.js

即时性

一次性

五、 process.nextTick()与setImmediate()的对比

  • process.nextTick()在当前阶段立即执行。
  • setImmediate()在下一次迭代或事件循环的tick事件上被触发。
  • process.nextTick()的回调函数执行的优先级要高于setImmediate()。  
程序代码 执行结果

console.log('开始');

process.nextTick(() => {

  console.log('下一个时间点的回调');

});

console.log('调度');

开始、调度、下一个时间点的回调

你可能感兴趣的:(Web前端,node.js,javascript,开发语言,ecmascript)