nodejs中EventEmitter
在模块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');
												
											nodejs中EventEmitter的更多相关文章
- nodejs 中自定义事件
		
经常看到 req.on('error', function(){...}); 这种代码. 在nodejs中,可以使用 EventEmitter来实现. 具体的关键词有如下几个: var reqEven ...
 - nodejs中Stream的理解
		
在nodejs中可以通过fs模块读写文件,我们来看下fs模块提供的接口: fs.readFile(filename, callback) 异步读取文件. filename是读取文件的文件名,如果是相对 ...
 - 深入理解 Node.js 中 EventEmitter源码分析(3.0.0版本)
		
events模块对外提供了一个 EventEmitter 对象,即:events.EventEmitter. EventEmitter 是NodeJS的核心模块events中的类,用于对NodeJS中 ...
 - Nodejs中的流
		
Nodejs中的很多地方都用到了流,流是一个很常见的概念,一个http请求,控制台输入输出的形式都是流.流可以分为三种: 可读流 可写流 既能读又能写 其中第三种流又可以分为全双工流Duplex和转换 ...
 - [NodeJs系列][译]理解NodeJs中的Event Loop、Timers以及process.nextTick()
		
译者注: 为什么要翻译?其实在翻译这篇文章前,笔者有Google了一下中文翻译,看的不是很明白,所以才有自己翻译的打算,当然能力有限,文中或有错漏,欢迎指正. 文末会有几个小问题,大家不妨一起思考一下 ...
 - 理解nodejs中的stream(流)
		
阅读目录 一:nodeJS中的stream(流)的概念及作用? 二:fs.createReadStream() 可读流 三:fs.createWriteStream() 可写流 回到顶部 一:node ...
 - nodeJS中的事件机制
		
events模块是node的核心模块,几乎所有常用的node模块都继承了events模块,比如http.fs等.本文将详细介绍nodeJS中的事件机制 EventEmitter 多数 Node.js ...
 - nodejs中使用worker_threads来创建新的线程
		
目录 简介 worker_threads isMainThread MessageChannel parentPort和MessagePort markAsUntransferable SHARE_E ...
 - 在nodejs中创建child process
		
目录 简介 child process 异步创建进程 同步创建进程 在nodejs中创建child process 简介 nodejs的main event loop是单线程的,nodejs本身也维护 ...
 
随机推荐
- 引用jquery框架后出错
			
问题描述:当引用了jquery框架后,页面的js不能正常工作. 后面我的解决办法:是因为在引用 jquery的框架时的代码为 <script type="text/javascript ...
 - JAVA 初识类加载机制 第13节
			
JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机 ...
 - php   mysql_insert_id()  获取为空
			
mysql_insert_id() 获取插入数据后的最新的id 遇到问题和解决的步骤如下: 1. 使用后总是返回空的字符串,网上查了一番有人说是id要AUTO_INCREMENT,并且mysql_in ...
 - 游戏基础元素之精灵——Cocos2d-x学习历程(九)
			
1.创建精灵 在实际使用中,精灵是由一个纹理创建的.在不加任何设置的情况下,精灵就是一张显示在屏幕上的图片.通常精灵置于层下,因此我们首选在层的初始化方法中创建精灵,设置属性,并添加到层中. 有多种方 ...
 - python 文件夹比较
			
参考:http://blog.csdn.net/imzoer/article/details/8675078 文件比较:filecmp模块:filecmp '''Created on 2014-6-6 ...
 - python日志记录-logging模块
			
1.logging模块日志级别 使用logging模块简单示例: >>>import logging >>>logging.debug("this's a ...
 - charset
			
<meta charset="UTF-8" /> 这是html5的写法. <meta http-equiv=“content-type” content=“tex ...
 - 无线功率 mW 和 dBm 的换算
			
无线电发射机输出的射频信号,通过馈线(电缆)输送到天线,由天线以电磁波形式辐射出去.电磁波到达接收地点后,由天线接收下来(仅仅接收很小很小一部分功率),并通过馈线送到无线电接收机.因此在无线网络的工程 ...
 - TF卡速度测试对比 Class数越高速度越快
			
存储卡(TF卡)是手机扩展存储的大杀器,让你多装n部学习资料,多装n个外语听力练习.除了装东西外,存储卡性能不佳也会影响手机的整体性能以及体验的.本文主要针对Android手机,我是懒人,但我讨厌懒人 ...
 - java学习之多线程
			
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 线程(Lightweight Process,LWP)是程序中一个单一 ...