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的监听函数