当前位置: 首页 > ds >正文

使用js写一个发布订阅者

在 JavaScript 中,实现一个简单的发布/订阅(Pub/Sub)模式可以通过以下步骤来完成:

  1. 创建一个对象来存储事件和对应的回调函数。
  2. 提供一个订阅(subscribe)方法来添加事件和回调。
  3. 提供一个发布(publish)方法来触发事件并执行对应的回调。
  4. 可选地提供一个取消订阅(unsubscribe)方法来移除事件对应的回调。

以下是一个简单的实现示例:

class PubSub {constructor() {this.events = {};}// 订阅事件subscribe(event, callback) {if (!this.events[event]) {this.events[event] = [];}this.events[event].push(callback);}// 发布事件publish(event, data) {if (this.events[event]) {this.events[event].forEach(callback => {callback(data);});}}// 取消订阅unsubscribe(event, callback) {if (this.events[event]) {const index = this.events[event].indexOf(callback);if (index !== -1) {this.events[event].splice(index, 1);}}}
}// 使用示例
const pubSub = new PubSub();// 订阅者
const subscriber1 = data => {console.log('Subscriber 1 received:', data);
};
const subscriber2 = data => {console.log('Subscriber 2 received:', data);
};// 订阅事件
pubSub.subscribe('message', subscriber1);
pubSub.subscribe('message', subscriber2);// 发布事件
pubSub.publish('message', 'Hello, World!');// 取消订阅
pubSub.unsubscribe('message', subscriber1);// 再次发布事件,只有subscriber2会接收到消息
pubSub.publish('message', 'Hello again!');

在这个例子中,PubSub 类有三个方法:subscribe 用于添加订阅,publish 用于发布事件,unsubscribe 用于取消订阅。当发布一个事件时,所有订阅了该事件的回调函数都会被调用。

这种模式在许多场景中都非常有用,比如在组件间进行解耦通信,或者在复杂的应用程序中管理不同部分之间的事件流。

http://www.xdnf.cn/news/3062.html

相关文章:

  • 给 BBRv2/3 火上浇油的 drain-to-target
  • 26考研 | 王道 | 计算机网络 | 第一章 计算机网络的体系结构
  • Python核心机制与实战技巧:从变量作用域到GIL的深度解析
  • 基于Springboot + vue实现的列书单读书平台
  • 技术赋能与模式重构:开源AI大模型驱动下的“一盘货”渠道革命——基于美的案例与S2B2C生态融合的实证研究
  • 部署一个自己的Spring Ai 服务(deepseek/通义千问)
  • 20250429 垂直地表发射激光测量偏转可以验证相对性原理吗
  • 学习海康VisionMaster之线圆测量
  • 一个SciPy图像处理案例的全过程
  • java 加入本地lib jar处理方案
  • 暑假里系统学习新技能(马井堂)
  • AWS创建多块盘并创建RAID0以及后增加空间
  • 【OSG学习笔记】Day 14: 操作器(Manipulator)的深度使用
  • Go语言Context机制深度解析:从原理到实践
  • 【Java核心】一文理解Java面向对象(超级详细!)
  • 测试基础笔记第十六天
  • 【沉浸式求职学习day29】【信科知识面试题第一部分】【新的模块,值得收藏】
  • Opencv中图像深度(Depth)和通道数(Channels)区别
  • 嵌入式复习第一章
  • 基于C++的IOT网关和平台1:github项目ctGateway
  • ppt箭头素材图片大全
  • Python实例题:ebay在线拍卖数据分析
  • OpenAI Embedding 和密集检索(如 BERT/DPR)进行语义相似度搜索有什么区别和联系
  • Transformer-LSTM-SVM回归
  • 扣子流程图批量导入飞书多维表格
  • 如何在Java中去除字符串中的空格?
  • 16、路由守卫:设置魔法结界——React 19 React Router
  • Uniapp:置顶
  • 跟我学C++中级篇——控制死锁
  • 【网络原理】TCP异常处理(二):连接异常