关于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 void(0)的妙用
Oct 21 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
Sep 02 Javascript
调用DOM对象的focus使文本框获得焦点
Feb 19 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
Mar 02 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
浅谈Vue的加载顺序探讨
Oct 25 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
Aug 24 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
May 14 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
Vuex中实现数据状态查询与更改
Nov 08 Javascript
js实现拖动缓动效果
Jan 13 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水印技术
2007/02/14 PHP
php动态函数调用方法
2015/05/21 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
用javascript实现点击链接弹出"图片另存为"而不是直接打开
2007/08/15 Javascript
模仿jQuery each函数的链式调用
2009/07/22 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
javascript截取字符串小结
2015/04/28 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
python编写分类决策树的代码
2017/12/21 Python
Python实现常见的回文字符串算法
2018/11/14 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
JSF界面控制层技术
2013/06/17 面试题
列车长先进事迹材料
2014/01/25 职场文书
励志演讲稿范文
2014/04/29 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
客户答谢会致辞
2015/07/30 职场文书
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript
win7配置本地ftp服务器的图文教程
2022/08/05 Servers