关于Node.js的events.EventEmitter用法介绍


Posted in Javascript onApril 01, 2017

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最简单的用法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
jquery 使用简明教程
Mar 05 Javascript
关于JavaScript中name的意义冲突示例介绍
May 29 Javascript
javascript与jquery中的this关键字用法实例分析
Dec 24 Javascript
JS实现汉字与Unicode码相互转换的方法详解
Apr 28 Javascript
angular实现图片懒加载实例代码
Jun 08 Javascript
微信小程序 如何引入外部字体库iconfont的图标
Jan 31 Javascript
Next.js项目实战踩坑指南(笔记)
Nov 29 Javascript
对Layer弹窗使用及返回数据接收的实例详解
Sep 26 Javascript
layui 解决富文本框form表单提交为空的问题
Oct 26 Javascript
vue prop属性传值与传引用示例
Nov 13 Javascript
vue 开发之路由配置方法详解
Dec 02 Javascript
ES6 Promise对象概念与用法分析
Apr 01 #Javascript
JavaScript中闭包的详解
Apr 01 #Javascript
基于JavaScript实现验证码功能
Apr 01 #Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 #Javascript
Angularjs使用指令做表单校验的方法
Mar 31 #Javascript
JS正则获取HTML元素的方法
Mar 31 #Javascript
JS+CSS实现下拉刷新/上拉加载插件
Mar 31 #Javascript
You might like
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
详解PHP的Yii框架中的Controller控制器
2016/03/29 PHP
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
快速排序 php与javascript的不同之处
2011/02/22 Javascript
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
Javascript实现打鼓效果
2021/01/29 Javascript
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
centos下更新Python版本的步骤
2013/02/12 Python
Python 自动补全(vim)
2014/11/30 Python
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
python脚本监控docker容器
2016/04/27 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
python 实现两个npy档案合并
2020/07/01 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
关爱留守儿童倡议书
2014/04/15 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
警用民用对讲机找不同
2022/02/18 无线电
Flink 侧流输出源码示例解析
2022/09/23 Servers