新闻中心
利用Node.js的EventEmitter实现自定义事件
EventEmitter是Node.js中实现事件驱动编程的核心工具,通过继承可为对象添加监听与触发事件能力。首先从events模块导入:const { EventEmitter } = require('events');,接着创建类继承EventEmitter以使用on、emit、once等方法。例如定义OrderProcessor类处理订单: class OrderProcessor extends EventEmitter { constructor() { super(); } placeOrder(orderId) {console.log(`订单 ${orderId} 已提交`); this.emit('orderPlaced', orderId);} shipOrder(orderId) {console.log(`订单 ${orderId} 正在发货`); this.emit('orderShipped', orderId);}}实例化后用on注册持续监听事件: const processor = new OrderProcessor();processor.on('orderPlaced', (orderId) => { console.log(监听到:订单 ${orderId} 已创建,准备支付);});processor.on('orderShipped', (orderId) => { console.log(通知用户:订单 ${orderId} 已发货);});使用once可监听仅执行一次的事件: processor.once('orderPlaced', (orderId) => { console.log(这是第一次也是最后一次提示:${orderId});});可通过命名回调函数并调用removeListener手动移除监听: function on

在Node.js中,EventEmitter 是一个核心模块,位于 events 模块中,它提供了一种简单而强大的方式来实现事件驱动编程。通过继承 EventEmitter,我们可以为自定义对象添加事件监听和触发能力,从而实现松耦合的模块通信。
引入并使用 EventEmitter
要使用 EventEmitter,首先需要从 events 模块中导入它:
const { EventEmitter } = require('events');接着可以创建一个类来继承 EventEmitter,以便拥有事件相关的方法,如 on、emit 和 once。
例如,创建一个表示“订单处理”的自定义类:
class OrderProcessor extends EventEmitter {constructor() {
super();
}
placeOrder(orderId) {
console.log(`订单 ${orderId} 已提交`);
this.emit('orderPlaced', orderId);
}
shipOrder(orderId) {
console.log(`订单 ${orderId} 正在发货`);
this.emit('orderShipped', orderId);
}}
监听自定义事件
实例化 OrderProcessor 后,可以通过 on 方法注册事件监听器,当事件被触发时执行对应逻辑。
const processor = new OrderProcessor(); processor.on('orderPlaced', (orderId) => {console.log(`监听到:订单 ${orderId} 已创建,准备支付`);
}); processor.on('orderShipped', (orderId) => {
console.log(`通知用户:订单 ${orderId} 已发货`);
});
当调用 placeOrder() 或 shipOrder() 时,对应的事件会被触发,所有绑定的回调函数将依次执行。
多奥淘宝客程序API免费版 F8.0
多奥淘宝客程序免费版拥有淘宝客站点的基本功能,手动更新少,管理简单等优点,适合刚接触网站的淘客们,或者是兼职做淘客们。同样拥有VIP版的模板引擎技 术、强大的文件缓存机制,但没有VIP版的伪原创跟自定义URL等多项创新的搜索引擎优化技术,除此之外也是一款高效的API数据系统实现无人值守全自动 化运行的淘宝客网站程序。4月3日淘宝联盟重新开放淘宝API申请,新用户也可使用了
0
查看详情
一次*件与移除监听
如果希望某个事件只响应一次,可以使用 once 方法:
processor.once('orderPlaced', (orderId) => {console.log(`这是第一次也是最后一次提示:${orderId}`);
});
此外,若需手动移除监听器,可将回调函数命名后通过 removeListener 移除:
function onShipped(orderId) {console.log(`特殊处理:${orderId}`);
} processor.on('orderShipped', onShipped);
processor.removeListener('orderShipped', onShipped);
EventEmitter 让我们能轻松实现观察者模式,提升代码的可维护性和扩展性。只要合理设计事件名称和数据传递结构,就能在复杂应用中实现清晰的模块间通信。
基本上就这些,不复杂但容易忽略细节,比如记得继承和正确 emit 事件名。
以上就是利用Node.js的EventEmitter实现自定义事件的详细内容,更多请关注其它相关文章!
# node.js
# 服务端
# 如何用
# 创建一个
# 如何使用
# 这是
# 移除
# 自定义
# 淘宝
# 工具
# 回调函数
# node
# js
# 回调
# 永泰搜索引擎seo公司
# 四川网络营销网络推广招聘
# 广东推广关键词排名价格
# 化工行业网站推广案例
# 横岗便宜的网站推广
# 广东seo优化内容
# 泰州正规seo网站公司报价
# seo推广很好 乐云seo专家
# 网站关键词优化怎么做
# 贵阳新闻推广网站建设
# 按需
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
J*aScript中如何高效提取对象指定属性
Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】
Python getattr() 异常处理深度解析:避免程序意外退出
在Qt QML中通过Python字典动态更新TextEdit内容的教程
Go语言中高效处理x-www-form-urlencoded表单数据
React列表渲染与独立状态管理:避免全局状态影响局部更新
优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践
Python大型XML文件高效流式解析教程
c++如何使用Meson构建系统_c++比CMake更快的构建工具
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
Pandas DataFrame 多条件优先级排序与排名
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
cad如何更改注释性对象的比例_cad注释性比例调整方法
如何提高微信支付的安全性_微信支付安全防护与设置建议
“音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!
凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
FullCalendar 自定义按钮样式定制指南
Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法
夸克AO3官网入口_AO3镜像网站2025推荐
Python多线程中正确使用sigwait处理SIGALRM信号
漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口
免费抖音短视频入口_抖音网页版短视频免费通道
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
字由网在线版登录地址 字由网网页版安全入口
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
蛙漫官方正版入口 蛙漫网页在线全集免费观看
sublime怎么设置启动时打开的窗口_sublime会话管理与热退出
2026年CSGO开箱网站推荐 CSGO开箱平台精选
VS Code远程开发时如何处理文件权限问题
mc.js官网登录入口 mc.js官方登录入口最新版
J*a 递归快速排序中静态变量的状态管理与陷阱
如何在CSS中使用浮动制作导航栏_float实现水平菜单
解决macOS Tkinter应用双击启动崩溃:PyInstaller打包指南
J*aScript中安全有效地处理localStorage字符串数据
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
夸克浏览器桌面版同步不了书签怎么处理 夸克浏览器跨设备同步异常解决方案
4399免费游戏网址入口 4399小游戏免费入口点开即玩
Python模块化编程:有效管理依赖与避免循环引用
C++如何实现单例模式_C++设计模式之线程安全的单例写法
QQ邮箱正确登录入口_QQ邮箱官方网站使用地址
58动漫网在线官方网 58动漫网正版动漫入口网址
J*aScript map 迭代中检测空数组元素的有效方法
QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台
composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?
如何使 Jest 模拟函数默认抛出错误以提高测试效率
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法


2025-11-03
浏览次数:次
返回列表