关于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 相关文章推荐
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
Apr 15 Javascript
js下利用控制器载入对应脚本
Jul 17 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
jquery自动填充勾选框即把勾选框打上true
Mar 24 Javascript
AngularJS语法详解(续)
Jan 23 Javascript
JS 全屏和退出全屏详解及实例代码
Nov 07 Javascript
bootstrap是什么_动力节点Java学院整理
Jul 14 Javascript
JS轮播图实现简单代码
Feb 19 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
May 04 Javascript
详解Vue结合后台的列表增删改案例
Aug 21 Javascript
vue slot与传参实例代码讲解
Apr 28 Javascript
layer.alert自定义关闭回调事件的方法
Sep 27 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
PHP5 的对象赋值机制介绍
2011/08/02 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
PHP操作Redis数据库常用方法示例
2018/08/25 PHP
简单的js分页脚本
2009/05/21 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
python 实现一个反向单位矩阵示例
2019/11/29 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年技术员工作总结
2014/11/18 职场文书
优秀团员个人总结
2015/02/26 职场文书
python基础之停用词过滤详解
2021/04/21 Python
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
vue中div禁止点击事件的实现
2022/04/02 Vue.js