关于Node.js的events.EventEmitter用法介绍

发布时间 - 2026-01-11 00:28:29    点击率:

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最简单的用法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# nodejs  # eventemitter  # node  # events.eventemitter  # Node.js原理阻塞和EventEmitter及其继承的运用实战  # node.js如何自定义实现一个EventEmitter  # 从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例  # node.js中的events.EventEmitter.listenerCount方法使用说明  # Node.js中的EventEmitter类使用小结  # 会在  # 回调  # 若干个  # 都是  # 是一个  # 你可以  # 让我们  # 这就是  # 这段  # 可以看到  # 只提供  # 最简单  # 大家多多  # 发生错误  # 移除  # 后向  # 此时会  # 来访问  # js  # pre 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速选择适合个人网站的云服务器配置?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  如何在阿里云ECS服务器部署织梦CMS网站?  Java垃圾回收器的方法和原理总结  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  利用JavaScript实现拖拽改变元素大小  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  历史网站制作软件,华为如何找回被删除的网站?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Laravel如何与Pusher实现实时通信?(WebSocket示例)  移动端脚本框架Hammer.js  Laravel如何实现模型的全局作用域?(Global Scope示例)  使用Dockerfile构建java web环境  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  实例解析angularjs的filter过滤器  高端企业智能建站程序:SEO优化与响应式模板定制开发  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  想要更高端的建设网站,这些原则一定要坚持!  中国移动官方网站首页入口 中国移动官网网页登录  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  如何确认建站备案号应放置的具体位置?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  php json中文编码为null的解决办法  Laravel怎么连接多个数据库_Laravel多数据库连接配置  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel如何使用Eloquent进行子查询  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Python3.6正式版新特性预览  网站制作报价单模板图片,小松挖机官方网站报价?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何快速重置建站主机并恢复默认配置?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  PHP正则匹配日期和时间(时间戳转换)的实例代码  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】