关于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 11 Javascript
js实现一个省市区三级联动选择框代码分享
Mar 06 Javascript
jquery实现表单验证并阻止非法提交
Jul 09 Javascript
javascript瀑布流布局实现方法详解
Feb 17 Javascript
jQuery遍历DOM节点操作之filter()方法详解
Apr 14 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
Sep 18 Javascript
老生常谈javascript变量的命名规范和注释
Sep 29 Javascript
JavaScript编写九九乘法表(两种任选)
Feb 04 Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 Javascript
Vue父组件监听子组件生命周期
Sep 03 Javascript
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
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
《APMServ 5.1.2》使用图解
2006/10/23 PHP
php生成二维码
2015/08/10 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
vue实现扫码功能
2020/01/17 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
劲霸男装广告词改编版
2014/03/21 职场文书
关爱留守儿童标语
2014/06/18 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
英文感谢信范文
2015/01/21 职场文书
元旦主持词开场白
2015/05/29 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis
php访问对象中的成员的实例方法
2021/11/17 PHP
python游戏开发之pygame实现接球小游戏
2022/04/22 Python