新闻中心

利用Node.js的EventEmitter实现自定义事件

2025-11-03
浏览次数:
返回列表
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实现自定义事件

在Node.js中,EventEmitter 是一个核心模块,位于 events 模块中,它提供了一种简单而强大的方式来实现事件驱动编程。通过继承 EventEmitter,我们可以为自定义对象添加事件监听和触发能力,从而实现松耦合的模块通信。

引入并使用 EventEmitter

要使用 EventEmitter,首先需要从 events 模块中导入它:

const { EventEmitter } = require('events');

接着可以创建一个类来继承 EventEmitter,以便拥有事件相关的方法,如 onemitonce

例如,创建一个表示“订单处理”的自定义类:

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 多奥淘宝客程序API免费版 F8.0

多奥淘宝客程序免费版拥有淘宝客站点的基本功能,手动更新少,管理简单等优点,适合刚接触网站的淘客们,或者是兼职做淘客们。同样拥有VIP版的模板引擎技 术、强大的文件缓存机制,但没有VIP版的伪原创跟自定义URL等多项创新的搜索引擎优化技术,除此之外也是一款高效的API数据系统实现无人值守全自动 化运行的淘宝客网站程序。4月3日淘宝联盟重新开放淘宝API申请,新用户也可使用了

多奥淘宝客程序API免费版 F8.0 0 查看详情 多奥淘宝客程序API免费版 F8.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数据的两种方法 

搜索