关于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 相关文章推荐
你所要知道JS(DHTML)中的一些技巧
Jan 09 Javascript
JMenuTab简单使用说明
Mar 13 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
May 27 Javascript
node.js中的fs.existsSync方法使用说明
Dec 17 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
Dec 12 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
Mar 23 Javascript
vue单页缓存存在的问题及解决方案(小结)
Sep 25 Javascript
原生JS实现的放大镜特效示例【测试可用】
Dec 08 Javascript
Fetch超时设置与终止请求详解
May 18 Javascript
如何在JavaScript中使用localStorage详情
Feb 04 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
PHP4实际应用经验篇(4)
2006/10/09 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
php自动加载机制的深入分析
2013/06/08 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
js验证表单大全
2006/11/25 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
Node.js + express基本用法教程
2019/03/14 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
Python的print用法示例
2014/02/11 Python
详解Python中for循环的使用方法
2015/05/14 Python
自己使用总结Python程序代码片段
2015/06/02 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
Python 实现文件读写、坐标寻址、查找替换功能
2019/09/11 Python
用python写测试数据文件过程解析
2019/09/25 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
企业办公室主任岗位职责
2014/02/19 职场文书
中秋节主持词
2014/04/02 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
旅行社计调工作总结
2015/08/12 职场文书
Python 数据可视化之Bokeh详解
2021/11/02 Python