关于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中的Primitive对象封装介绍
Dec 31 Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 Javascript
基于Jquery和html5的7款个性化地图插件
Nov 17 Javascript
javascript下使用Promise封装FileReader
Feb 19 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 Javascript
JS加载iFrame出现空白问题的解决办法
May 13 Javascript
浅谈Javascript数组(推荐)
May 17 Javascript
拖动时防止选中
Feb 03 Javascript
javascript实现电脑和手机版样式切换
Nov 10 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
Mar 14 Javascript
用webAPI实现图片放大镜效果
Nov 23 Javascript
使用compose函数优化代码提高可读性及扩展性
Jun 16 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
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
PHP写的求多项式导数的函数代码
2012/07/04 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
python重试装饰器示例
2014/02/11 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
python实现整数的二进制循环移位
2019/03/08 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
python操作cfg配置文件方式
2019/12/22 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
派出所所长先进事迹
2014/05/19 职场文书
品牌服务方案
2014/06/03 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
建党伟业的观后感
2015/06/01 职场文书
清洁工工作总结
2015/08/11 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
Python数据类型最全知识总结
2021/05/31 Python