千家信息网

node.js中的EventEmitter怎么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,今天小编给大家分享一下node.js中的EventEmitter怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所
千家信息网最后更新 2026年11月01日node.js中的EventEmitter怎么用

今天小编给大家分享一下node.js中的EventEmitter怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

events(事件触发器)


events是nodejs内置的事件触发器,在node的内置模块里很多都用到了events,比如http.server在每次接受到请求时触发事件,还有stream就是基于事件的使用on来监听对应的事件。 所有触发事件的对象都是EventEmitter实例,这些对象暴露了EventEmitter.on('事件',callback),通常使用EventTmitte.on注册事件,EventEmitter.emit触发事件。

例子:

  const events= require('events');const event=new events();//实例化EventEmitterevent.on('data',(a,b)=>{    console.log('参数'+a+b)    console.log(this,'this')    //注意,如果callback是 箭头函数的话this指向的是全局对象    //      如果callback是function(){}形式的话,this会绑定到EventEmitter实例上    console.log('emit触发了data事件')})event.emit('data',1,2); //使用emit触发事件

异步操作

因为EventEmitter.on('事件名称',callback)里的callback是同步执行的,但是在某些情况下我们不得不使用异步操作所以我们可以在使用SetImmediate来执行异步操作

 const events= require('events');const event=new events();event.on('event', (a, b) => {      setImmediate(() => {    console.log('this happens asynchronously');  });  //因为这里的监听器是同步执行的,但是我们可以使用setImediate函数等待监听器里的其他内容执行完再执行});event.emit('event',1,2);

触发一次

我们正常通过emit触发事件时,emit有几个事件就会被触发几次,但是我们可以使用once注册事件,使用once触发的事件只能被触发一次

  const EventEmitter =require('events');  const MyEventEmitter=new EventEmitter();  let a=0;  //正常注册事件和触发  MyEventEmitter.on('add',()=>{      a++      console.log(a)   })  MyEventEmitter.emit('add'); // 1;  MyEventEmitter.emit('add'); // 2;  // 使用once注册  MyEventEmitter.once('add',()=>{      a++      console.log(a);  })  MyEventEmitter.emit('add') // 1  MyEventEmitter.emit('add') // 不生效了

error事件

EventEmitter是没有error事件的,所以当发生错误的时候只能强制退出执行,所以我们必须自己注册一个error事件,以致于在发生错误的时候触发到error事件

 const EventEmitter=require('events'); const MyEventEmitter=new EventEmitter(); MyEvenEmitter.on('error',(err)=>{   console.error(err,'报错了') })

除了上面那种方式我们还可以通过errorMonitor在不注册error事件的情况下,来监听emit触发的报错 使用了errorMonitor我们就不必要再去通过手动注册error事件了

  const {EventEmitter,errorMonitor}=require('events');  const MyEventEmitter=new EventEmitter();  MyEventEmitter.on(errorMonitor,(err)=>{      console.log(err);  })  MyEventEmitter('error' , new Error('报错了'))

EventEmitter类

newListener事件

在我们添加事件监听的时候会触发newListener事件,所以我们可以注册newListener事件用来在添加事件监听的时候做一些事情

 const {EventEmitter}=require('events');  const MyEvent=new EventEmitter();  MyEvent.on('newListener',(name,litener)=>{      //name就是正在监听的事件的名称      //listener是事件的处理函数      MyEvent.on('event',()=>{        console.log('在newListener添加的事件')      })    })  MyEvent.on('event',()=>{      console.log('正常注册的event事件')  })  //此时我们再不触发event事件的情况下,newListener事件就会执行,因为我们只要正在注册事件就会触发newListener事件  //注意:newListener事件必须要使用EventEmitter.once()注册,因为如果我们在newListener事件里再去添加注册事件的话,而且外边有多个注册事件就会触发多次newListener事件,就会发生堆栈溢出 MyEvent.emit('event'); //打印的结果   //    在newListener注册的事件   //     正常注册的event事件

removeListener事件

removeListener事件用于删除已经注册的事件,但是,removeListener不会阻止掉正在被emit触发的事件

 const callbackB=()=>{    console.log('B')}const callbackA=()=>{    console.log('A')    event.removeListener('data',callbackB)}event.on('data',callbackA)event.on('data',callbackB)event.emit('data'); //在执行callbackA的时候删除了data,但是不会阻止掉下一个emit的触发event.emit('data'); //在这里的时候才是真正被删除掉了

addListener 和on的作用一样

eventNames

返回一个数组,数组里包含了所有已经注册的事件的名称

 const {EventEmitter} =require('events'); const MyEvent=new EventEmitter(); MyEvent.on('data',()=>{}); MyEvent.on('finish',()=>{}); console.log(MyEvent.eventNames());  //打印结果  ['data','finish']

getMaxListeners

返回可以注册的事件的最大数值,默认是10,如果超过10个会有警告 但是我们可以通过setMaxListener(20) 去进行修改

const {EventEmitter} =require('events'); const MyEvent=new EventEmitter(); console.log(MyEvent.getMaxListener()); //10 event.setMaxListener(20);  console.log(MyEvent.getMaxListener(20));

listenerCount

返回注册的事件的数量

 const {EventEmitter} =require('events'); const MyEvent=new EventEmitter(); MyEvent.on('data',()=>{}); MyEvent.on('data',()=>{}); MyEvent.on('finish',()={}); console.log(MyEvent.listenerCount()) // 2

以上就是"node.js中的EventEmitter怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

事件 监听 时候 知识 篇文章 内容 函数 名称 实例 对象 就是 情况 正在 可以通过 数组 监听器 结果 触发器 错误 同步 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 湖北九亚互联网络科技有限公司 科技互联网产品 互联网科技财经 河南真二互联网科技有限公司 金融科技创新监管互联网金融 互联网络科技有限公司 北京互联网科技 互联网科技公司怎么样 西安互联网科技公司 深圳市运趣互联网科技有限公司 成都互联网科技公司100强 智腾互联网科技有限公司 广州有谷有贝互联网科技有限公司 互联网科技机房 科技互联网经济论坛 互联网科技品牌 北京品多多互联网科技有限公司 数字科技和互联网金融哪个好 知域互联网科技有限公司官网 河南云网互联网络科技有限公司 涨乐互联网科技 电子科技大学互联网 恒生科技互联网指数分析 移动互联网年度科技创新 辽宁互联网新科技 乌鲁木齐新华智原互联网科技学校 烟台灵鸽互联网科技有限公司 兰石爱特工业互联网科技分公司 互联网科技创新创业项目
0