关于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 相关文章推荐
什么是cookie?js手动创建和存储cookie
May 27 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
Jun 24 Javascript
JavaScript中SetInterval与setTimeout的用法详解
Nov 10 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 Javascript
JS中判断null的方法分析
Nov 21 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 Javascript
在微信小程序中使用图表的方法示例
Apr 25 Javascript
js getBoundingClientRect使用方法详解
Jul 17 Javascript
vue中添加与删除关键字搜索功能
Oct 12 Javascript
vue中使用vee-validator完成表单校验方案
Nov 01 Javascript
vue - props 声明数组和对象操作
Jul 30 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
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 IE中下载附件问题解决方法
2014/01/07 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
javascript开发技术大全-第3章 js数据类型
2011/07/03 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
深入源码解析Python中的对象与类型
2015/12/11 Python
Python unittest 简单实现参数化的方法
2018/11/30 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
HR喜欢的自荐信格式
2013/10/08 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
导游词开场白
2015/01/31 职场文书
岳麓书院导游词
2015/02/03 职场文书
校园开放日新闻稿
2015/07/17 职场文书
教师节获奖感言
2015/07/31 职场文书
2016年公司新年寄语
2015/08/17 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫