在模块events中,定义了一个EventEmitter类,可以使用var EventEmitter = require('events');访问它。基本上所有发送事件的对象都是继承自EventEmitter。有基本属性和方法如下。

  • setMaxListeners(n)
    设置事件的最大监视者数量
  • getMaxListeners(n)
    获取事件的最大监视者数量
  • on(event, listener)/addListener(event, listener)
    为事件增添一个监视者
  • once(event, listener)
    为事件增添一个一次监视者
  • removeListener(event, listener)
    为事件删除一个监视者,注意listener指向同一个事件监听函数。
  • removeAllListeners([event])
    如果无参数,移除所有事件的监视者。如果参数为event,移除该事件的监视者。
  • listenerCount(event)
    获取特定事件的监视者数量。
  • listeners(event)
    获取特定事件的监听者列表。
  • _eventsCount
    事件的数量
var EventEmitter = require('events');var em = new EventEmitter();
em.setMaxListeners(2);var start = (data) => console.log(`data ${data} start`);
var end = (data) => console.log(`data ${data} end`);em.on('data', start);
em.on('data', end);em.once('close', () => console.log('close...'));console.log(`the max listeners value: ${em.getMaxListeners()}`);
console.log(`the number of event: ${em._eventsCount}`);
console.log(`the number of listeners the data event: ${em.listenerCount('data')}`);
console.log(`the number of listeners the data close: ${em.listenerCount('close')}`);setInterval(() => {em.emit('data', 'eat');em.emit('data', 'play')em.emit('close');
}, 1000);setTimeout(() => {em.removeListener('data', start);em.removeListener('data', end);
}, 3000);

写一个继承EventEmitter的对象。使用 util.inherits() 来完成对象的继承。

var EventEmitter = require('events');
var util = require('util');function MyStream() {EventEmitter.call(this);
}util.inherits(MyStream, EventEmitter);MyStream.prototype.write = function (data){this.emit('write', data);
}var stream = new MyStream();stream.on('write', function(data) {console.log(data);
});stream.write('hello, world');

再用ES6的class重写一下继承。

var EventEmitter = require('events');class MyStream extends EventEmitter {write(data) {this.emit('write', data);}
}var stream = new MyStream();
stream.on('write', data => console.log(data));
stream.write('hello, world');
stream.write('hello, world');
stream.write('hello, world');

转载于:https://www.cnblogs.com/xianwang/p/5034656.html

nodejs中EventEmitter相关推荐

  1. nodejs中使用worker_threads来创建新的线程

    文章目录 简介 worker_threads isMainThread MessageChannel parentPort和MessagePort markAsUntransferable SHARE ...

  2. 深入理解 Node.js 中 EventEmitter源码分析(3.0.0版本)

    events模块对外提供了一个 EventEmitter 对象,即:events.EventEmitter. EventEmitter 是NodeJS的核心模块events中的类,用于对NodeJS中 ...

  3. nodejs中events模块的使用

    nodejs中events的基本使用 讲events之前我们先用js模拟实现一个EventEmitter类 源码 //订阅者集合 class EventEmitter{constructor(){th ...

  4. nodejs+html转换pdf,Nodejs中使用phantom将html转为pdf或图片格式的方法

    最近在项目中遇到需要把html页面转换为pdf的需求,并且转换成的pdf文件要保留原有html的样式和图片.也就是说,html页面的图片.表格.样式等都需要完整的保存下来. 最初找到三种方法来实现这个 ...

  5. nodeJS中读写文件方法的区别

    导言:nodejs中所有与文件相关的操作都在fs模块中,而读写操作又是我们会经常用到的操作,nodejs的fs模块针对读操作为我们提供了readFile,read, createReadStream三 ...

  6. nodejs+html转换pdf,Nodejs中使用phantom将html转为pdf或图片格式的方法.pdf

    Nodejs中中使使用用phantom将将html转转为为pdf或或图图片片格格式式的的方方法法 最近在项目中遇到需要把html页面转换为pdf 的需求,并且转换 的pdf文件要保留原有html的样式 ...

  7. 理解nodejs中函数的参数的来由

    看一段创建并启动nodejs服务的代码,如下: var http = require('http');http.createServer(function (request, response) {r ...

  8. Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型

    场景 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件让全世界浏览,还可以放置数据文件,让全世界下载.目前最主流的Web服务 ...

  9. Nodejs中的模块系统

    一.模块化的定义 ①具有文件作用域 ②具有通信规则:加载和导出规则 二.CommonJS模块规范 1.nodejs中的模块系统,具有文件作用域,也具有通信规则,使用require方法加载模块,使用ex ...

最新文章

  1. 微信公众平台对所有公众号开放自定义菜单
  2. Zabbix监控CPU与实际值不符合,
  3. 死磕Java并发:J.U.C之AQS同步状态的获取与释放
  4. curl -h php,PHP下使用curl问题小结
  5. Lesson 8.1Lesson 8.2 决策树的核心思想与建模流程CART分类树的建模流程与sklearn评估器参数详解
  6. arcgis api for javascipt 加载天地图、百度地图
  7. HashiCorp Nomad中的高级节点排干
  8. bash问题引起的centos系统不能启动
  9. osgi学习之---扩展点理解
  10. Managed keyedState中的ValueStateDescriptor与MapStateDescriptor
  11. SDUT 3258 Square Number 简单数学
  12. python data frame_Python dataframer包_程序模块 - PyPI - Python中文网
  13. 再次携号转网_潍坊一小伙欲携号转网屡被拒 联通客服:试运营状态不支持携转...
  14. java失败javac成功_JAVA SE JDK-10安装、配置(解决java成功,javac失败问题)
  15. java——关于数组的定义 和 访问修饰符的修饰内容
  16. 使用 IntraWeb (29) - 基本控件之 TIWAutherList、TIWAutherINI、TIWAutherEvent
  17. 商务与经济统计学习 --多个比率的比较、独立性及拟合优度检验
  18. 全国省市县数据库脚本
  19. 意识理论综述:众多竞争的意识理论如何相互关联?
  20. EMV规范(二)——应用选择

热门文章

  1. hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)
  2. Document,Node,Element,HTMLDocument ,HTMLCollection,HTMLElement,NodeList
  3. 在windows下使用llvm+clang
  4. golang设置默认地区
  5. 面试碰到这个算法:字母异位词分组
  6. 汇编语言--通用寄存器
  7. NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)
  8. C语言中| 按位或, || 逻辑或。
  9. return 关键字
  10. 剑指offer五:两个栈实现一个队列