每天学习一点点,成功增加一大步

NodeJS基础:利用 EventEmitter 添加多个事件监听

NodsJS zhanghui 1757℃

今天还学习了 nodeJS 新的知识点就是 EventEmitter 模块的使用,利用 EventEmitter 同个事件添加多个监听器。下面就是多个事件监听的示例:

var EventEmitter = require('events').EventEmitter;
var life = new EventEmitter();
life.on('Miss', function(who) {
    console.log('给 ' + who + ' 倒水');
});
life.on('Miss', function(who) {
    console.log('给 ' + who + ' 按摩');
});
life.on('Miss', function(who) {
    console.log('给 ' + who + ' 聊天');
});
life.emit('Miss', '汉子');

输出结果的截图

同个事件多个监听的效果

但官方建议在同个事件最多10个监听器,多了可能会造成内存泄露,所以默认情况下只能添加10个监听器,所以如果你超出了10个默认情况下会抛出警告信息的,但如果非要添加超过10个监听器也是可以的,只要在 new EventEmitter() 的下一行添加以下代码就可以实现

 life.setMaxListeners(11); // 11 是最大额度

那么如何判断事件是否被监听过可以在 life.emit 前面加上赋值的变量,然后打印它的结果,但其输出是 true 时表示已经被监听过,但其输出是 false 时表示没有被监听过。

var isLife = life.emit('Miss', '汉子');
console.log(isLife);

输出结果的截图

判断是否被监听

那么如何移除一个监听器,将被移除的监听器中的方法移出来写在独立的 function 中,可以看下面的示例。

 var EventEmitter = require('events').EventEmitter;
var life = new EventEmitter();
life.setMaxListeners(11);
function water(who) {
    console.log('给 ' + who + ' 倒水');
}
life.on('Miss', water);
life.on('Miss', function(who) {
    console.log('给 ' + who + ' 按摩');
});
life.on('Miss', function(who) {
    console.log('给 ' + who + ' 聊天');
});
life.removeListener('Miss', water);
var isLife = life.emit('Miss', '汉子');
console.log(isLife);

其的输出结果如下图.

移除一个监听器后输出

如果你认为一个个的移除比较的麻烦,可以使用以下的代码进行批量的移除操作了。这里会有个可填写的参数 type 这是用来输入事件名,可不输入,如果留空则全部都会被移除,如果填写上了只会移除输入了事件名的所有监听器

 life.removeAllListeners([type]);

那么如何知道删除后还剩下多少个监听器,输入下两行中任意一行的代码,其输出的结果都一样。

 console.log(life.listeners('Miss').length);
console.log(EventEmitter.listenerCount(life, 'Miss'))

删除后的统计结果

GITHUB地址:https://github.com/366065186/nodejs-demo/tree/master/events

转载请注明:隨習筆記 » NodeJS基础:利用 EventEmitter 添加多个事件监听