`

NodeJs的EventEmitter的简单运用

 
阅读更多

Node.js EventEmitter

Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。

Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。

EventEmitter 类

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

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

// 引入 events 模块
var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

 

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 事件触发

 

EventEmitter 的每个事件由一个事件名和若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter 支持 若干个事件监听器。

当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。

让我们以下面的例子解释这个过程:

//event.js 文件
var events = require('events'); 
var emitter = new events.EventEmitter(); 
emitter.on('someEvent', function(arg1, arg2) { 
	console.log('listener1', arg1, arg2); 
}); 
emitter.on('someEvent', function(arg1, arg2) { 
	console.log('listener2', arg1, arg2); 
}); 
emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); 

 执行以上代码,运行的结果如下:

$ node event.js 
listener1 arg1 参数 arg2 参数
listener2 arg1 参数 arg2 参数

 

以上例子中,emitter 为事件 someEvent 注册了两个事件监听器,然后触发了 someEvent 事件。

运行结果中可以看到两个事件监听器回调函数被先后调用。 这就是EventEmitter最简单的用法。

转自:nodejs菜鸟教程

 

1
5
分享到:
评论

相关推荐

    nodejs中软学习配套源码

    这个"nodejs中软学习配套源码"是作者在学习Node.js过程中编写的示例代码,旨在帮助初学者更好地理解和实践Node.js的核心概念。 在Node.js的学习过程中,你可能会接触到以下几个关键知识点: 1. **非阻塞I/O模型**...

    es6-examples:es6实现的示例代码,包含Promise、EventEmitter、浏览器和Nodejs的Event Loop。请使用支持es6的chrome浏览器测试和运行

    **ES6 示例代码详解** 本项目“es6-examples”是一个深入探讨ES6新特性的实践集合,主要涉及Promise、EventEmitter以及浏览器和Node.js的...同时,这也将帮助你更好地掌握在实际开发中如何运用ES6特性,提高代码质量。

    NodeJS-LFW212

    在“NodeJS-LFW212”项目中,你可能会看到许多使用`eventEmitter`模块的例子,通过监听和触发事件来实现不同组件之间的通信。 2. **V8引擎** Node.js使用Google的V8引擎来执行JavaScript代码,这使得它能以接近...

    nodejs-exercises:面向后端开发人员的NodeJS

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行...这个“nodejs-exercises”项目可能包含了上述知识点的实践示例,通过练习,后端开发者能够巩固理论知识,提升实际操作技能,更好地在实际项目中运用 Node.js。

    Course--NodeJS-Docs

    学习 Node.js,你需要掌握如何编写事件监听器和触发器,以及理解和使用 `EventEmitter` 类。 其次,Node.js 提供了丰富的内置模块,如 `fs`(文件系统)、`http`(HTTP 协议)、`path`(路径操作)等。`fs` 模块...

    NodeJS_-Practice

    通过深入学习和实践这些知识点,你将能够熟练运用Node.js进行Web开发、构建服务器、处理数据、实现高并发应用。同时,Node.js的生态不断发展,不断有新的库和工具涌现,持续学习和关注社区动态,将使你在Node.js领域...

    simple-nodejs-nonblocking-process

    在Node.js环境中,"simple-nodejs-nonblocking-process"这一主题主要关注的是如何利用JavaScript的非阻塞I/O特性来优化程序性能。Node.js是基于Chrome V8引擎的JavaScript运行环境,它的一大特色就是异步、非阻塞I/O...

    chatroom-nodejs

    3. **EventEmitter**: Node.js 内置的 EventEmmitter 类是处理事件的关键,聊天室中的各种交互(如用户发送消息、新用户加入等)都可以看作是事件,通过监听和触发这些事件来控制程序的流程。 4. **Express 框架**:...

    js-challanges:nodejs 项目充满 javascript 模块挑战

    理解和运用`EventEmitter`类来处理事件和监听器是解决挑战的重要部分。 9. **错误处理**:良好的错误处理是任何程序的基础。学习如何使用`try...catch`语句,以及如何妥善处理异步错误。 10. **单元测试**:通过...

    Ej_MiriadaxCurso2_Mods_1a3:课程2 Miriadax Nodejs的练习集,快速表达

    在本资源"Ej_MiriadaxCurso2_Mods_1a3"中,我们面对的是一个与Miriadax课程相关的Node.js练习集合,重点在于快速掌握和运用JavaScript编程技能。Miriadax是一个在线教育平台,提供各种技术课程,而这个练习集是由...

    professional_node.js

    ### Professional Node.js:构建基于JavaScript的可扩展软件 ...通过上述内容的学习,开发者可以全面掌握Node.js的各项核心技术,并能够运用到实际项目开发中去,构建出高性能、可扩展的应用程序。

    Node Js In Action(中文版)

    通过使用`eventEmitter`对象,开发者可以实现事件监听和触发,提高代码的可读性和可维护性。此外,`async/await`语法的引入,使得异步编程更加简洁,避免了回调地狱的问题。 Node.js的模块系统也是其亮点之一,`...

    Professional Node.js-Building Javascript Based Scalable Software

    第二部分,Node核心API基础(Node Core API Basics),详细介绍了Node.js的核心模块,例如如何加载模块、使用Buffer来处理二进制数据、EventEmitter模式简化事件绑定、使用定时器来调度函数执行等。这部分为开发者...

    Node即学即用.pdf

    通过本书,我们可以深入理解并运用Node.js来开发实际项目。 首先,Node.js的基础知识是学习的重点。它基于Chrome的V8引擎,允许开发者在服务器端使用JavaScript编写代码,打破了JavaScript只能在浏览器中运行的局限...

Global site tag (gtag.js) - Google Analytics