Node.js-事件模块(events)之监听方式
事件模块
events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
步骤:
- 引入系统提供的事件模块
- 实例化事件对象
- 注册事件
- 触发事件
方法:
- 引入 events模块
var events = require('events');
- 实例化事件对象
var myEmitter = new events.EventEmitter();
- 注册事件
myEmitter.on('someEvent',function (a,b,c) {
console.log(a + b);
console.log(c);
});
- 触发事件
setTimeout(function () {
myEmitter.emit('someEvent',5,10,"触发事件,在注册事件的回掉函数中接受参数")
},2000);
- 首先引入系统提供的events模块,然后实例化出对象.
- 注册事件on参数:
emitter.on(event, function)
event:事件名称,为一个字符串,function:一个回掉函数.myEmitter.emit
:触发事件myEmitter.emit('事件名称',a,b,c)
传参.
监听方式:
一. 监听一次:once:
once:只监听执行一次,与on不同,on可以不停止的情况下一直处于监听状态
如:
//引入系统提供的事件模块
var events = require('events');
//实例化事件对象
var myEmitter = new events.EventEmitter();
var add = 0;
var a = 0,b = 0;
//注册事件
myEmitter.once('someEvent',function (a,b) {
add = a + b;
console.log(add);
});
setInterval(function () {
myEmitter.emit('someEvent',5,5);
},1000);
以上代码如果使用on监听的情况下,会每1s执行一次
console.log(add)
,使用once后,监听只执行一次,便不再执行.
二. 移除监听:myEmitter.removeListener:
移除监听器,语法为:
myEmitter.removeListener(event,function);
如:
//引入系统提供的事件模块
var events = require('events');
//实例化事件对象
var myEmitter = new events.EventEmitter();
var add = 0;
var a = 0,b = 0;
var Fnc = function (a,b) {
add = a + b;
console.log(add);
};
//注册事件
myEmitter.on('someEvent',Fnc);
setInterval(function () {
myEmitter.emit('someEvent',5,5);
},1000);
setTimeout(function () {
myEmitter.removeListener('someEvent',Fnc);
},5000);
以上代码执行为:每1s执行一次Fnc函数,如果没有```setTimeout(function () {
myEmitter.removeListener('someEvent',Fnc);
},5000);
**三. 移除所有监听:myEmitter.removeAllListeners**
> 移除所有监听器.
> 语法为:`myEmitter.removeAllListeners([event]);`
> `event`事件类型,支持多个,如上面代码中的`'someEvent'`.
> 如()为空,为移除所有的监听
**四. 设置事件绑定个数: myEmitter.setMaxLisstener(n)**
> emitter.setMaxLisstener(n) 可以设置同一事件的监听器最大绑定数,默认情况下,超过10个就好警告提示,这能帮我们快速找到内存泄露的地方。显然,不是所有的事件触发器都限制在10个监听器,通过这个方法可以设置,如果设置为0就是无限制。
**五. 查看事件绑定个**数:myEmitter.listenerCount(emitter,event)**
>```
>// 查看server绑定的'request'事件的监听器个数
>var num = events.EventEmitter.listenerCount(myEmitter, 'someEvent');
>console.log(num);
>```
作者:webarn
出处:http://www.cnblogs.com/webran/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。