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

可以做流程图的网站优化大师平台

可以做流程图的网站,优化大师平台,旅游网站开发建设方案,福建省住房与城乡建设厅网站发布订阅模式是什么 发布订阅模式是一种代码的设计模式,它允许对象间进行松散耦合的通信。 发布者(Publishers)不会直接调用订阅者(Subscribers),相反,它们通过事件通道发布消息;订…

发布订阅模式是什么

发布订阅模式是一种代码的设计模式,它允许对象间进行松散耦合的通信。
发布者(Publishers)不会直接调用订阅者(Subscribers),相反,它们通过事件通道发布消息;订阅者通过注册监听事件通道上的消息来做出响应。
这种模式在事件驱动编程和异步编程中非常有用。

发布订阅模式怎么实现

发布订阅模式在前端开发中有广泛的应用。例如,事件处理、状态管理库(如 Redux)、消息中间件、数据流控制等

1)一个用于存储事件及其对应回调的事件中心。

2)一个 on 方法,用于订阅某个事件,并将回调函数注册到事件中心中。

3)一个 emit 方法,用于发布某个事件,并调用所有订阅该事件的回调函数。

4)一个 off 方法,用于解除订阅。

使用场景:
发布-订阅模式可用于解耦复杂的代码逻辑,例如:
浏览器中的事件处理(如点击,输入等);
背景任务和前台任务之间的通信;
多模块或组件之间的通信。

高级实现:
在实际开发中,我们可能会用到一些更复杂的发布-订阅库比如 EventEmitter (Node.js 内置)、PubSubJS 等,这些库提供了更具备鲁棒性的实现和更多特性。

代码

let eventEmitter ={//事件中心events:{},//订阅事件on: function (eventName,callback){//如果事件不存在if(!this.events[eventName]){this.events[eventName] = [];}this.events[eventName].push(callback);},//发布事件 事件触发emit:function (eventName,...args){// 事件不存在if(!this.events[eventName]){return ;}this.events[eventName].forEach(callback =>{callback(...args)})},//取消事件off:function (eventName,callback){if(this.events[eventName]){this.events[eventName] = this.events[eventName].filter(e=>e!==callback)}},/*** 这里的 args 并没有在 once 函数的参数列表中明确声明,* 而是作为 onceWrapper 函数的一个内部变量(通过剩余参数语法捕获)。* 这是因为 onceWrapper 函数不知道它会接收多少个参数,* 所以它使用 ...args 来捕获所有参数,并将它们作为一个数组处理* 。然后,它可以通过 callback(...args) 将这些参数传递给 callback 函数*///一次性订阅once:function (eventName,callback){const onceWrapper = (...args)=>{callback(...args)//执行一次后取消订阅this.off(eventName,onceWrapper)}this.on(eventName,onceWrapper)}}//示例
//用户定义的回调函数
function user1(msg){console.log("user1 ",msg);
}function user2(msg){console.log("user2 ",msg);
}function user3(msg){console.log("user3 ",msg);}
//注册事件
eventEmitter.on("test",user1)
eventEmitter.on("test",user2)//事件触发
eventEmitter.emit("test","这是一个测试")//取消订阅
eventEmitter.off('test', user1);// 发布
eventEmitter.emit('test', '这次只有 User2 收到消息');//一次性订阅注册
eventEmitter.once("once",user3)//事件触发两次
eventEmitter.emit("once","test by user3")
eventEmitter.emit("once","test by user3")//没有输出
http://www.yayakq.cn/news/820537/

相关文章:

  • 网站建设会议通知唐山网站建设托管
  • 怎样设计自己网站域名学ui设计网站
  • 做空包网站合法吗实事新闻热点
  • 微信网页上的网站怎么做企业主页的特点包括
  • dw网页制作怎么插mp4视频seo排名优化是什么
  • 什么是网站的主页wordpress文章显缩络图
  • 外贸网站建站赚钱wordpress通知邮件美化
  • 内蒙古网站建设熊掌号灯具网站模板
  • 企业展厅建设计划书网站优化描述设置
  • 深圳免费网站建设推广联盟
  • 做网站用php还是node哈尔滨做网站设计
  • 网站一般用什么服务器购物网站风格
  • 郑州外贸网站建设公司排名天猫开店流程及费用2022
  • 科技网站实例免费自动回收的传奇手游
  • 做点效果图赚钱的网站网站建设的实验原理和方法
  • 做ui设计用什么网站网站定制开发流程和功能
  • 怎么给公司建网站什么叫门户网站
  • 发布新闻最快的网站咸阳网站建设费用
  • 中山外贸网站建设公司深圳网站制作平台
  • 深圳网站设计多少钱oa系统是什么系统
  • 湖南网站建设价格温州营销推广公司
  • 吉林大学建设工程学院 旧网站乐清网站建设乐清网站设计
  • 标志设计logo网站建设银行手机银行网站登录
  • 好的网站和网页有哪些wordpress nginx rewrite
  • 网站免费空间哪个好手机编程软件app下载
  • 青岛网站建设运营推广怎么把底部的wordpress
  • 网站建设信息科技寻花问柳专注做一家男性喜欢的网站
  • 自己做网站nas文化馆的网站怎么建设
  • 网站模板二次开发快捷的网站建设排行榜
  • 找人做软件网站西餐厅网站模板