关于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 自定义事件初探
Aug 21 Javascript
javascript 函数使用说明
Apr 07 Javascript
Javascript实现滚动图片新闻的实例代码
Nov 27 Javascript
浅析Javascript中“==”与“===”的区别
Dec 23 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
laydate 显示结束时间不小于开始时间的实例
Aug 11 Javascript
JS模拟超市简易收银台小程序代码解析
Aug 18 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
Sep 28 Javascript
ElementUI Tag组件实现多标签生成的方法示例
Jul 08 Javascript
理解JavaScript中的Proxy 与 Reflection API
Sep 21 Javascript
vue实现lodop打印功能的示例
Nov 11 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常用的文件操作函数经典收藏
2013/04/02 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
vue实现购物车小案例
2019/09/27 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
Python爬取某平台短视频的方法
2021/02/08 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
数据库连接池的工作原理
2012/09/26 面试题
倡议书的写法
2014/08/30 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
《社戏》教学反思
2016/02/22 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
python中的getter与setter你了解吗
2022/03/24 Python