【Node.js】定时器

本文详细介绍了Node.js中的定时器,包括一次性定时器setTimeout、周期性定时器setInterval、即时定时器setImmediate,以及如何取消定时器。同时,探讨了setImmediate与setTimeout以及process.nextTick与setImmediate的区别,深入理解Node.js事件循环中的时间处理。
摘要由CSDN通过智能技术生成

一、设置定时器

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('调度');

开始、调度、下一个时间点的回调
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值