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个后,会报出一个警告node

 

可是咱们是能够修改事件监听都最大值的,加上这行代码
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的监听函数
相关文章
相关标签/搜索