Nodejs事件监听模块

nodejs里面是不存在浏览器里面都冒泡,捕获这些行为的,所以Nodejs实现了events这个模块,里面大多数的模块都集成了这个模块,所以events是node模块里面最重要都一个模块,他对外只暴露一个对象,就是EventEmitter,EventEmitter作用只有两个,分别是,事件都发送和事件都监听。emit支持多个事件监听,最大值是10个,也就是可以为某个事件添加10个监听函数,来做10件事情,比如
var EventEmitter = require('events').EventEmitter;
var life = new EventEmitter();

//这里不用on,也可以用addEventListener
life.on('doSth', function(who){
  console.log('给 ' + who + ' 倒水');
})

life.emit('doSth','Sunny');

这个on最多可以添加10个,添加11个后,会报出一个警告

 

但是我们是可以修改事件监听都最大值的,加上这行代码
life.setMaxListeners(11)
放在事件监听以前

 

事件没有emit,on相应里面的动作是不会执行的,怎么判断一个事件emit了呢
var hasEmit = life.emit('doOther','lucy');
如果注册了,会返回true,如果没注册,会返回false

 

可以删除某一个事件监听,怎么监听,第一不要写错名字removeListerner
,第二不能用匿名函数
var EventEmitter = require('events').EventEmitter;
var life = new EventEmitter();
 

function water(who){
    console.log('给 ' + who + ' 倒水');
}
//这里不用on,也可以用addEventListener
life.on('doSth', water)
 

life.removeListerner('doSth',water);
life.emit('doSth','Sunny');

这样在10件事里面移除了倒水这件事



在不知道各个注册事件下有多少个事件监听,可以通过下面的方式检测不同的事件下有多少个监听函数
console.log( life.listeners('doSth').length )
如果里面不指明哪个事件会返回0,

 

另外一种获取事件监听长度的方式是
console.log( EventEmitter.listenerCount(life,'doSth'))

 

 

批量移除事件的方法
life.removeAllListeners('doSth');
如果里面事件名不写,则删除所有的事件兼容函数,不仅仅是doSth的监听函数

 

posted @ 2018-06-05 06:51  wzndkj  阅读(2114)  评论(0编辑  收藏  举报