EventEmitter类
EventEmitter的核心就是事件触发和事件监听功能的封装.
支持事件响应的核心模块都是EventEmitter的子类,一般使用子类就可以了.
EventEmitter的简单例子EventEmitterDemo.js如
var events = require('events');//引入模块
//events模块只提供了一个对象events.EventEmitter
var eventEmitter = new events.EventEmitter();//创建eventEmitter对象
eventEmitter.on('event_name',function(arg1,arg2){//回调参数接收事件参数
console.log('event_name 1 with two arguments',arg1,arg2);
});
//为相同事件注册第二个事件监听器
eventEmitter.on('event_name',function(arg1,arg2,arg3){
console.log('event_name 2 with three arguments',arg1,arg2,arg3);
});
//为相同事件注册第三个事件监听器
eventEmitter.on('event_name',function(){
console.log('event_name 3 without argument');
});
eventEmitter.emit('event_name');//触发事件
console.log('----------');
setTimeout(function(){
eventEmitter.emit('event_name','参数1','参数2');//触发事件,包含事件参数
},1000);
运行结果
>node EventEmitterDemo.js
event_name 1 with two arguments undefined undefined
event_name 2 with three arguments undefined undefined undefined
event_name 3 without argument
----------
event_name 1 with two arguments 参数1 参数2
event_name 2 with three arguments 参数1 参数2 undefined
event_name 3 without argument
EventEmitter类方法,EventEmitter实例方法与事件
EventEmitter.js内容如
var events = require('events');
var eventEmitter = new events.EventEmitter();
/*--------------事件---------------*/
//EventEmitter内置事件,程序异常触发error事件,没有监听器Node.js输出错误并退出
//建议为会触发error事件的对象添加监听器,避免整个程序奔溃
eventEmitter.on('error',function(){
console.log('error catched');
});
eventEmitter.emit('error');
//EventEmitter内置事件,eventEmitter实例移除监听器时removeListener事件会被触发
eventEmitter.on('removeListener',function(event,fn){
console.log('remove a Listener',event,fn);
});
//EventEmitter内置事件,eventEmitter实例添加新的监听器时newListener事件会被触发
eventEmitter.on('newListener',function(event,fn){
console.log('add new Listener',event,fn);
});
/*--------------类方法----------------*/
//返回eventEmitter实例指定事件的监听器个数
var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name');
var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener');
console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count);
/*--------------方法----------------*/
//单个事件的监听器数量默认为10,超出会有警告信息,可以提高监听器默认限制的数量
eventEmitter.setMaxListeners(3);
//注册一个监听器
eventEmitter.on('event_name',function(arg1){
console.log('this is a listener added by on with argument',arg1);
});
//注册监听器到监听器数组的尾部
eventEmitter.addListener('event_name',function(arg1,arg2){
console.log('this is a listener added by addListener with arguments',arg1,arg2);
});
//注册一个单次监听器,被触发后先触发removeListener事件后再执行本监听器,最后移除本监听器
eventEmitter.once('event_name',function(){
console.log('this is a listener added by once');
});
var eventHandler = function(){
console.log('this is a listener with a name eventHandler');
};
eventEmitter.on('event_name',eventHandler);
console.log('------------------event_name事件的监听器数组-------------');
//返回指定事件的监听器数组
var eventListenersArray = eventEmitter.listeners('event_name');
console.log(eventListenersArray);
console.log('-------------------触发event_name事件---------------------');
//触发监听事件,有监听器返回true,否则返回false
var hasEventHandler = eventEmitter.emit('event_name','参数1','参数2');
console.log('hasEventHandler:' + hasEventHandler);
setTimeout(function(){
eventEmitter.emit('event_name');
},1000);
console.log('---------------------------------------------');
var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name');
var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener');
console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count);
console.log('-----------------移除eventHandler监听器----------------------');
//移除指定监听器
eventEmitter.removeListener('event_name',eventHandler);
var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name');
var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener');
console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count);
console.log('----------------移除event_name事件所有监听器-------------------');
//移除指定事件的所有监听器
eventEmitter.removeAllListeners('event_name');
var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name');
var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener');
console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count);
console.log('---------------移除eventEmitter实例所有监听器-----------------------');
//移除所有的监听器
eventEmitter.removeAllListeners();
var event_name_count = events.EventEmitter.listenerCount(eventEmitter,'event_name');
var remove_listener_count = events.EventEmitter.listenerCount(eventEmitter,'removeListener');
console.log('event_name_count:' + event_name_count, 'remove_listener_count:' + remove_listener_count);
运行结果如
>node EventEmitter.js
error catched
event_name_count:0 remove_listener_count:1
add new Listener event_name function (arg1){
console.log('this is a listener added by on with argument',arg1);
}
add new Listener event_name function (arg1,arg2){
console.log('this is a listener added by addListener with arguments',ar
1,arg2);
}
add new Listener event_name function (){
console.log('this is a listener added by once');
}
add new Listener event_name function (){
console.log('this is a listener with a name eventHandler');
}
------------------event_name事件的监听器数组-------------
[ [Function],
[Function],
{ [Function: g] listener: [Function] },
[Function: eventHandler] ]
-------------------触发event_name事件---------------------
this is a listener added by on with argument 参数1
this is a listener added by addListener with arguments 参数1 参数2
remove a Listener event_name function (){
console.log('this is a listener added by once');
}
this is a listener added by once
this is a listener with a name eventHandler
hasEventHandler:true
---------------------------------------------
event_name_count:3 remove_listener_count:1
-----------------移除eventHandler监听器----------------------
remove a Listener event_name function (){
console.log('this is a listener with a name eventHandler');
}
event_name_count:2 remove_listener_count:1
----------------移除event_name事件所有监听器-------------------
remove a Listener event_name function (arg1,arg2){
console.log('this is a listener added by addListener with arguments',ar
1,arg2);
}
remove a Listener event_name function (arg1){
console.log('this is a listener added by on with argument',arg1);
}
event_name_count:0 remove_listener_count:1
---------------移除eventEmitter实例所有监听器-----------------------
remove a Listener error function (){
console.log('error catched');
}
remove a Listener newListener function (event,fn){
console.log('add new Listener',event,fn);
}
event_name_count:0 remove_listener_count:0
(node:26660) Warning: Possible EventEmitter memory leak detected. 4 event_name
isteners added. Use emitter.setMaxListeners() to increase limit
相关推荐
EventEmitter.listenerCount(emitter, event) 接收参数: emitter 事件发射器 event 事件 例子: 代码如下: if(events.EventEmitter.listenerCount(this, ‘feedback’) == 0) { //…. } 源码: 代码如下: ...
Node.js EventEmitter Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。 Node.js 里面的许多对象都会分发事件:一个 net.Server 对象会在每次有新连接时触发一个事件, 一个 fs.readStream 对象会...
Node.js中使用事件驱动的方式进行编程,events模块提供了一个核心的功能,即EventEmitter类。这个类用于处理事件发射和监听,是实现Node.js事件驱动编程模式的基础。 EventEmitter的核心概念包括事件发射和事件监听...
4. **事件与回调**:深入解析事件循环和事件监听器的工作原理,如何使用`EventEmitter`类处理事件。 5. **非阻塞I/O**:通过实例演示如何实现非阻塞I/O操作,理解异步编程的概念。 6. **文件系统操作**:展示了Node....
"前端项目-EventEmitter.zip"是一个专注于浏览器环境下的事件处理库,它实现了EventEmitter模式,使得JavaScript代码可以通过发布和订阅事件来实现组件之间的通信。下面我们将详细探讨EventEmitter及其在前端项目中...
事件发射器node.js的EventEmitter模块的事件模型源码================================================分析源码1.外部(function(){})(window)为匿名函数,并插入的窗口2.用var定义局部变量EventEmitter,并用...
`EventEmitter`类是Node.js内置的事件处理类,常用于实现事件驱动编程。 ### 5. 异步IO操作 Node.js的异步I/O是通过回调函数来实现的,避免了阻塞主线程,提高了程序的运行效率。`fs`模块提供了文件系统的异步操作...
节点异常终止控制器基于EventEmitter的Node.JS的AbortController Polyfill用法import fetch from 'node-fetch'import AbortController from 'node-abort-controller'const controller = new AbortController ( )...
在 Node.js 中,内置的 `events` 模块提供了 EventEmitter 类,它是实现事件驱动的基础。EventEmitter 允许对象发射(emit)事件并让其他对象监听(listen)这些事件。当事件被发射时,监听该事件的函数会被调用,...
eventEmitter.on('data_received', function(){ console.log('数据接收成功。'); }); // 创建事件处理程序 var connectHandler = function connected() { console.log('连接成功。'); // 触发 data_received ...
EventEmitter 是 Node.js 中实现事件驱动机制的基础,几乎所有的模块都继承了这个类。EventEmitter 的实例可以分发事件,并且拥有自己的事件,可以绑定/触发监听器,实现了异步操作。 Node.js 里面的许多对象都会...
Node.js的事件模块提供了单一的核心对象,即events.EventEmitter类。通过这个类,我们可以实例化EventEmitter对象并使用它来监听和发射事件。EventEmitter类的核心操作包括事件监听和事件发射。 事件监听是通过...
- 详细讲解了Node.js中的事件驱动模型,特别是`EventEmitter`类。 - 展示了如何利用事件驱动来构建响应式和高效的程序。 - **使用定时器安排函数执行**(第6章) - 讨论了定时器在异步编程中的作用,包括`...
在Node.js中,事件发射器通常是通过继承`events`模块中的`EventEmitter`类来实现的。一个事件发射器对象可以发射多个类型的事件,并允许任何数量的监听器注册到其上。一旦事件发射器触发一个事件,所有注册到该事件...
使用EventBus,开发者可以定义事件类,然后在需要发送事件的地方调用`EventBus.getDefault().post(event)`,在接收端使用`@Subscribe`注解的方法处理事件。 2. **Otto** Otto是Square公司为Android开发的事件总线库...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行开发,极大地推动了全栈开发的流行。本教程旨在为初学者提供一个快速学习 Node.js 的入口,帮助你从零开始...
Node.js API是JavaScript的运行环境Node.js的核心部分,它提供了一系列用于开发服务器端应用的API。Node.js采用事件驱动、非阻塞IO模型,使其轻量又高效,非常适合处理大量并发请求。以下将详细介绍Node.js API的...