QQ登录

只需一步,快速开始

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

依梦瑶 发表于 2019-5-23 13:15:36 | 显示全部楼层 |阅读模式

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

  1. var EventEmitter = require('events').EventEmitter;
  2. var life = new EventEmitter();
  3. life.on('Miss', function(who) {
  4.     console.log('给 ' + who + ' 倒水');
  5. });
  6. life.on('Miss', function(who) {
  7.     console.log('给 ' + who + ' 按摩');
  8. });
  9. life.on('Miss', function(who) {
  10.     console.log('给 ' + who + ' 聊天');
  11. });
  12. life.emit('Miss', '汉子');
复制代码

输出结果的截图

1.png

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

  1. life.setMaxListeners(11); // 11 是最大额度
复制代码

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

  1. var isLife = life.emit('Miss', '汉子');
  2. console.log(isLife);
复制代码

输出结果的截图

2.png

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

  1. var EventEmitter = require('events').EventEmitter;
  2. var life = new EventEmitter();
  3. life.setMaxListeners(11);
  4. function water(who) {
  5.     console.log('给 ' + who + ' 倒水');
  6. }
  7. life.on('Miss', water);
  8. life.on('Miss', function(who) {
  9.     console.log('给 ' + who + ' 按摩');
  10. });
  11. life.on('Miss', function(who) {
  12.     console.log('给 ' + who + ' 聊天');
  13. });
  14. life.removeListener('Miss', water);
  15. var isLife = life.emit('Miss', '汉子');
  16. console.log(isLife);
复制代码

其的输出结果如下图.

3.png

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

  1. life.removeAllListeners([type]);
复制代码

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

  1. console.log(life.listeners('Miss').length);
  2. console.log(EventEmitter.listenerCount(life, 'Miss'))
复制代码

4.png

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

精华推荐
  • 探究!做设计之前的“构思”

    探究!做设计之前的“构思”

  • 汉字之美!中文字体设计原则

    汉字之美!中文字体设计原则

  • 一支互联网雪糕的诞生

    一支互联网雪糕的诞生

  • 设计灵感来自何处?

    设计灵感来自何处?

  • 自行车停靠架和旧自行车变废为宝家居创意作品大全

    自行车停靠架和旧自行车变废为宝家居创意作

  • 造车生死局:要么转型,要么死

    造车生死局:要么转型,要么死

  • 从欠8千万到年赚8亿

    从欠8千万到年赚8亿

  • 一座非典型五线小城的日常

    一座非典型五线小城的日常

QQ客服热线
QQ:1090281100 周一至周日:09:00 - 21:00
WeChat:duzhe1069
Email:kaixin1069@vip.qq.com

优创意logo

勿要吝啬你无形资产,请为创新续源,知识、点子、灵感、经验、需求等均是创新源泉,你不经意的一句话将是另一个人的灵感。明天的明天,还有明天,我们应该把握今天,每一个今天,都有一个新的事物在出现,今天的漠视明天的落后,不浪费每一个学习的时刻,学习助力非凡。

技术支持 Discuz! X3.4 - 3.5 beta © 2001-2019 Comsenz Inc.

小黑屋|手机版|优创意 ( 粤ICP备16085288号-1 )|申请友链

粤公网安备 44011102001144 号 GMT+8, 2020-10-31 01:14 , Processed in 0.090649 second(s), 29 queries , Gzip On.

快速回复 返回顶部 返回列表