文档章节

node EventEmitter 对象

十万猛虎下画山
 十万猛虎下画山
发布于 2017/08/16 16:42
字数 407
阅读 12
收藏 0

EventEmitter 类

events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。

你可以通过require("events");来访问该模块。

EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。

下面我们用一个简单的例子说明 EventEmitter 的用法:

//event.js 文件
var EventEmitter = require('events').EventEmitter; 
var event = new EventEmitter(); 
event.on('some_event', function() { 
	console.log('some_event 事件触发'); 
}); 
setTimeout(function() { 
	event.emit('some_event'); 
}, 1000);

执行结果如下:

运行这段代码,1 秒后控制台输出了 'some_event 事件触发'。其原理是 event 对象注册了事件 some_event 的一个监听器,然后我们通过 setTimeout 在 1000 毫秒以后向 event 对象发送事件 some_event,此时会调用some_event 的监听器。

$ node event.js 
some_event 事件触发

实例

以下实例通过 connection(连接)事件演示了 EventEmitter 类的应用。

创建 main.js 文件,代码如下:

var events = require('events');
var eventEmitter = new events.EventEmitter();

// 监听器 #1
var listener1 = function listener1() {
   console.log('监听器 listener1 执行。');
}

// 监听器 #2
var listener2 = function listener2() {
  console.log('监听器 listener2 执行。');
}

// 绑定 connection 事件,处理函数为 listener1 
eventEmitter.addListener('connection', listener1);

// 绑定 connection 事件,处理函数为 listener2
eventEmitter.on('connection', listener2);

var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " 个监听器监听连接事件。");

// 处理 connection 事件 
eventEmitter.emit('connection');

// 移除监绑定的 listener1 函数
eventEmitter.removeListener('connection', listener1);
console.log("listener1 不再受监听。");

// 触发连接事件
eventEmitter.emit('connection');

eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " 个监听器监听连接事件。");

console.log("程序执行完毕。");

本文转载自:http://www.runoob.com/nodejs/nodejs-event.html

十万猛虎下画山
粉丝 6
博文 130
码字总数 98614
作品 0
朝阳
程序员
私信 提问
Node模块之Events模块

第一 Events模块概述 Events模块是Node对“发布/订阅”模式(publish/subscribe)的实现。一个对象通过这个模块,向另一个对象传递消息。 Node中的Event模块仅仅提供了一个对象: EventEmitte...

博为峰教研组
2016/10/31
47
0
node --EventEmitter

node的所有异步I/O操作在完成的时候 都会 发送一个事件到 事件队列。 node里面很多对象都会分发事件,这些对象都是events.EventEmitter的实例。 EventEmitter类 events模块只提供了一个对象:...

求是科技
2016/07/11
21
0
Node.js in Practice总结1

Node.js概述 Node.js是基于V8, 用于开发网络应用的一个平台, 它主要包含了基于TCP的异步操作和同步文件管理. 为什么要使用Node.js Node.js使用的是非阻塞的I/O. Node.js的主要特性 EventEmi...

fzyz_sb
2016/12/17
43
0
node --事件循环

node.js中基本上所有的事件机制都是采用观察者模式实现。 node.js单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调...

求是科技
2016/07/08
13
0
Node.js开发入门—HTTP文件服务器

HelloWorld示例只有演示意义,这次我们来搞一个实际的例子:文件服务器。我们使用Node.js创建一个HTTP协议的文件服务器,你可以使用浏览器或其它下载工具到文件服务器上下载文件。 用Node.js...

foruok
2015/08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot 2.0 整合sharding-jdbc中间件,实现数据分库分表

一、水平分割 1、水平分库 1)、概念:以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中。2)、结果每个库的结构都一样;数据都不一样;所有库的并集是全量数据; 2、水平分表...

知了一笑
27分钟前
16
0
程序员的黄金五年,如何做到从月薪4.5K达到45K?

前言: 在Java程序界流行着一种默认的说法叫「黄金5年」,也就是一个程序员从入职的时候开始算起,前五年的选择直接影响着整个职业生涯中的职业发展方向和薪资走向。 如何走好这5年很关键,如...

kx33389
34分钟前
4
0
ElasticSearch

一、ElasticSearch简介 1.1 什么是ElasticSearch ElasticSearch,简称es,es是一个开源的高扩展的分布式全文搜索引擎,可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务...

榴莲黑芝麻糊
今天
5
0
候选人体验大奖花落金融壹账通 AI科技赋能智慧HR发展

如何让企业变得“聪明起来”是当前全球范围内众多企业的追求,“聪明的”企业可以从茫茫人海中识别出适合的候选人,并通过给其提供体验良好的人力资源管理服务,从人才层面保证自身的长远发展...

IFTNews
今天
5
0
Element.getBoundingClientRect()

Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置。 语法 rectObject = object.getBoundingClientRect(); 值 返回值是一个 DOMRect 对象,这个对象是由该元素的 getC...

JamesView
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部