首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【EventBus】事件通信框架 ( 发送事件 | 根据事件类型获取订阅 | 调用订阅方法 )

文章目录 一、根据事件类型获取订阅 二、调用订阅方法 一、根据事件类型获取订阅 ---- 接收到了 发布 Publisher 发送给本消息中心 Event 消息事件对象 , 将该事件对象转发给相应接收该类型消息...Publisher 发送给本消息中心 Event 消息事件对象 * 将该事件对象转发给相应接收该类型消息 订阅 ( 订阅对象 + 订阅方法 ) * 通过事件类型到...---- 通过反射调用订阅方法 ; 在 MySubscription 中封装了 订阅对象 和 订阅方法 , 订阅方法中封装了 Method 方法 ; 直接调用 Method 对象 invoke 方法..., 通过反射调用订阅方法 , 传入第一个参数是 订阅对象 , 即订阅方法所在对象 , 传入第二个参数是 订阅方法接收事件参数对象 ; /** * 调用订阅订阅方法...* @param subscription 订阅对象 + 订阅方法 * @param event 发布传递消息事件 */ private void invokeMethod

49710

深入学习 Node.js EventEmitter

发布/订阅模式 在软件架构中,发布-订阅是一种消息范式,消息发送(称为发布)不会将消息直接发送给特定接收(称为订阅)。...订阅将收到其订阅主题上所有消息,并且所有订阅同一主题订阅将接收到同样消息。发布负责定义订阅订阅消息类别。...观察模式大多数时候是同步,比如当事件触发,Subject 就会去调用观察方法。而发布/订阅模式大多数时候是异步(使用消息队列)。...绑定完事件,如果要派发事件,就可以调用 EventEmitter 实例 emit() 方法,该方法实现如下(代码片段): EventEmitter.prototype.emit = function...,查找该事件处理器对应索引,若该索引大于 0,则会调用 Node.js 内部工具库提供 spliceOne() 方法,移除对应事件处理器。

1K30
您找到你想要的搜索结果了吗?
是的
没有找到

js发布订阅

发布-订阅模式,看似陌生,其实不然。工作中经常会用到,例如 Node.js EventEmitter on 和 emit 方法;Vue 中 on 和 emit 方法。...定义 发布-订阅模式其实是一种对象间一对多依赖关系,当一个对象状态发送改变时,所有依赖于它对象都将得到状态改变通知。...,根据 event 去执行对应缓存列表中函数(发布发布事件到调度中心,调度中心处理代码) off 方法可以根据 event 取消订阅(取消订阅) once 方法只监听一次,调用完毕后删除缓存函数...Javascript 发布-订阅模式'); eventEmitter.emit('article2', 'Javascript 观察模式'); eventEmitter.emit('article2'...发布-订阅模式 用户4订阅了: Javascript 观察模式 */ 三、 Vue 中实现 有了发布-订阅模式知识后,我们来看下 Vue 中怎么实现 on 和 emit 方法,直接看源码

1.5K20

Node.js EventEmitter 事件处理详解

我们可以把事件驱动程序看作是发布-订阅模型,其中发布触发事件,订阅侦听事件并采取相应措施。 例如,假设有一个服务器,用户可以向其上传图片。...在触发上传事件后,订阅可以通过向网站管理员发电子邮件,让他们知道用户已上传照片并对此做出反应;另一个订阅可能会收集有关操作信息,并将其保存在数据库中。...对象(“监听器”)” ❞ 这个类在某种程度上可以描述为发布-订阅模型辅助工具实现,因为它可以用简单方法帮助事件发送器(发布)发布事件(消息)给监听器(订阅)。...把 update 作为事件名, currentTime 作为自程序启动以来时间进行传递。 通过 emit() 方法触发发射器,该方法用我们提供信息推送事件。...这个方法不会返回已发布事件,而是返回订阅事件列表。

1.5K20

发布订阅模式,在工作中它能量超乎你想象

其实在早期还是用jq开发时代,有很多地方,我们都会出现发布订阅影子,例如有trigger和on方法 再到现在vue中,emit和on方法。...(fn); }; corp.emit = function() { // 第一个参数是对应key // 直接用数组shift方法取出 let key = [].shift.call...一起喵喵喵 */ 这样其实就实现了一个可以使用发布订阅模式了,其实说起来也是比较简单,来一起屡屡思路吧 思路: 创建一个对象(缓存列表) on方法用来把回调函数fn都加到缓存列表中 emit方法取到...arguments里第一个当做key,根据key去执行对应缓存列表中函数 remove方法可以根据key取消订阅 工作中应用 插广告 先给大家看一个链接,在这个新闻转码页项目中,我负责写下面推荐流内容...缺点: 创建订阅本身要消耗一定时间和内存 多个发布订阅嵌套一起时候,程序难以跟踪维护 强如发布订阅模式,也是劲酒虽好,不要贪杯道理哦。

57750

发布订阅模式,在工作中它能量超乎你想象

其实在早期还是用jq开发时代,有很多地方,我们都会出现发布订阅影子,例如有trigger和on方法 再到现在vue中,emit和on方法。...(fn); }; corp.emit = function() { // 第一个参数是对应key // 直接用数组shift方法取出 let key = [].shift.call...一起喵喵喵 */ 这样其实就实现了一个可以使用发布订阅模式了,其实说起来也是比较简单,来一起屡屡思路吧 思路: 创建一个对象(缓存列表) on方法用来把回调函数fn都加到缓存列表中 emit方法取到...arguments里第一个当做key,根据key去执行对应缓存列表中函数 remove方法可以根据key取消订阅 工作中应用 插广告 先给大家看一个链接,在这个新闻转码页项目中,我负责写下面推荐流内容...缺点: 创建订阅本身要消耗一定时间和内存 多个发布订阅嵌套一起时候,程序难以跟踪维护 强如发布订阅模式,也是劲酒虽好,不要贪杯道理哦。

35920

如果面试官让你讲讲发布订阅设计模式?

一、定义 在软件架构中,发布订阅是一种消息范式,消息发送(称为发布)不会将消息直接发送给特定接收(称为订阅),而是将发布消息分为不同类别,无需了解哪些订阅(如果有的话)可能存在。...实现思路:新增 once 订阅方法,当响应了对应“发布消息”,则主动取消订阅当前执行回调函数。...首先梳理下缓存消息逻辑流程: UML时序图 发布发布消息,事件中心检测是否存在订阅,如果没有订阅订阅此条消息,则把该消息缓存到离线消息队列中,当有订阅订阅时,检测是否订阅了缓存中事件消息,..._eventsCount 赋值为1,然后调用 clearEvent() 方法就可以了,而不必遍历清除事件 3.5 EventEmitter function EventEmitter() { this...EventEmitter 对象等同于上述我们事件中心定义,其功能梳理如下: EventEmitter 其中有必要讲就是 emit() 方法,而订阅注册事件on() 和 once() 方法

2.7K30

一文彻底搞懂Events模块

这就是一个观察模式 订阅了某个报社报纸 生活中就像是去报社订报纸,你喜欢读什么报就去报社去交钱订阅,当发布了新报纸时候,报社会向所有订阅了报纸每一个人发送一份,订阅就可以接收到。...你订阅了我公众号 我这个微信公号作者是发布,您这些微信用户是订阅「我发送一篇文章时候,关注了【程序员成长指北】订阅们都可以收到文章。...而flag标记是一个订阅方法插入标识,如果为'true'就视为插入在数组头部。可以看到,这就是观察模式订阅方法实现。...emit方法 EventEmitter.prototype.emit = function (type, ...args) { if (this...._events[type].forEach(fn => fn.call(this, ...args)); } }; emit方法就是将订阅方法取出执行,使用call方法来修正this指向,使其指向子类实例

92420

一文彻底搞懂Events模块

这就是一个观察模式 订阅了某个报社报纸 生活中就像是去报社订报纸,你喜欢读什么报就去报社去交钱订阅,当发布了新报纸时候,报社会向所有订阅了报纸每一个人发送一份,订阅就可以接收到。...你订阅了我公众号 我这个微信公号作者是发布,您这些微信用户是订阅「我发送一篇文章时候,关注了【程序员成长指北】订阅们都可以收到文章。...而flag标记是一个订阅方法插入标识,如果为'true'就视为插入在数组头部。可以看到,这就是观察模式订阅方法实现。...emit方法 EventEmitter.prototype.emit = function (type, ...args) { if (this...._events[type].forEach(fn => fn.call(this, ...args)); } }; emit方法就是将订阅方法取出执行,使用call方法来修正this指向,使其指向子类实例

84331

高频js手写题之实现数组扁平化、深拷贝、总线模式

Object.getOwnPropertyNames()方法返回一个由指定对象所有自身属性属性名(包括不可枚举属性但不包括Symbol作为名称属性)组成数组。...Object.getOwnPropertySymbols() 方法返回一个给定对象自身所有 Symbol 属性数组事件总线(发布订阅模式)原理:事件总线是发布/订阅模式实现,其中发布发布数据,并且订阅可以监听这些数据并基于这些数据作出处理...这使发布订阅松耦合。发布将数据事件发布到事件总线,总线负责将它们发送订阅on 或 addListener(event, listenr)就是为指定事件添加一个监听器到监听数组尾部。...eventEmitter emit 方法,发出 say 事件,通过 eventEmitter on 方法监听,从而执行相应函数。...,返回是实际调用这个方法实例化对象};连等赋值操作坑:A = B = C 其中执行顺序为 B=C A = B emit代码实现emit思路从this.

35740

从一道面试题简单谈谈发布订阅和观察模式

测试移除chifan所有事件监听 ee.offAll('chifan') console.log(ee) // 此时可以看到ee.listeners已经变成空对象了,再emit发送chifan事件也不会有反应了...我们刚刚实现EventEmitter一个实例ee就是一个事件调度中心,发布订阅是松散耦合,互不关心对方是否存在,他们关注是事件本身。...发布借用事件调度中心提供emit方法发布事件,而订阅则通过on进行订阅。 如果还不是很清楚的话,我们把代码换下单词,是不是变得容易理解一点呢?...在观察模式中,只有两个主体,分别是目标对象Subject,观察Observer。 观察需Observer要实现update方法,供目标对象调用。update方法中可以执行自定义业务代码。...Subject需要维护自身观察数组observerList,当自身发生变化时,通过调用自身notify方法,依次通知每一个观察执行update方法

1K10

Vue3中如何自定义消息总线

发布-订阅模式 发布-订阅模式(Publish-Subscribe Pattern)是一种在软件设计中常见模式,它允许消息发送和接收之间通过事件进行通信,而不必直接相互依赖。...订阅(Subscriber):对特定事件感兴趣对象,它们会向消息中心订阅这些事件。当发布发布一个事件时,所有订阅了该事件订阅都会收到通知。...可扩展性:可以轻松地添加新发布订阅,而无需修改现有的代码。这使得系统能够灵活地适应不断变化需求。 灵活性:支持多个订阅同时订阅同一个事件,并且可以根据需要定制事件处理方式。...: EventsType = {}; } events 是一个对象,其中每个键都是事件名称,是一个由 EventType 对象组成数组,EventType 对象中包含是否只订阅一次标志位和回调函数...订阅事件 定义一个 on 方法,用于订阅事件,代码如下: class EventEmitter { private events: EventsType = {} on(eventName:

10710

实现一个 EventEmitter

在前端开发中,经常会使用到发布订阅模式,发布订阅模式也被称为观察模式。...; }); div 元素相当于一个订阅,他会告诉浏览器(发布),他要订阅一个 click 事件,这个事件会弹出一个提示框。当用户点击 div 元素时,浏览器就会“发布”这个消息,告知用户。...Node.js 中许多模块都继承了这个类,拥有了事件监听能力。 EventEmitter 内部维护着一个事件监听函数集,当内部方法 emit 被调用后就会触发相应监听函数。...EventEmitter 简单实现一下。EventEmitter 类需要有一个存放监听函数数据结构,用对象就好,对象键是事件名称,是数组用来存放监听函数。...表明该事件是否会冒泡; cancelable 一个布尔,表明该事件是否可以被取消; detail 当事件初始化时传递数据; 通过 dom.dispatchEvent 方法触发事件。

1.3K10

JS 和 Node.js 中“事件驱动”是什么意思?

请记住,事件驱动、发布-订阅和观察模式在实践中不是一回事,但在理想情况下,它们使用相同方法:一个实体广播一条消息,其他实体侦听该消息。 发布-订阅模式和我一样老。...Node.js 中每个事件发送器都有一个名为 on 方法,该方法至少需要两个参数: 要侦听事件名称 监听器函数 让我们举一个实际例子。...在此示例中,server 是事件发送器,主题。另一方面,侦听器函数是观察。 但是那些 on 方法从哪里来呢?...在我们之前例子中,来自 net 模块网络服务器就使用了 EventEmitter。 Node.js 中 EventEmitter 有两种基本方法:on 和 emit。...EventEmitter 还有一个 emit 方法,在你广播自定义事件(消息)时很有用。

8.4K20

TS 设计模式08 - 发布订阅模式

这里你和服务员之间消息通过点餐系统来传递,你并不需要知道是谁点完成,服务员也不需要知道这份餐品给谁。完美解耦了消息发送和接收。...小结 发布订阅模式可以说是对观察模式进一步抽象。...我们通过消息中心对消息进行统一处理,那么这里通知者和消费关系其实被弱化了,它们可以是任意对象,通知者和消费也可以是同一个对象,这种模式甚至在非对象也可以使用,即我们只关注发布和订阅行为本身,而不关心发布订阅是谁...参考 从发布订阅模式入手读懂Node.jsEventEmitter源码 使用typescript 写一个简单事件监听/发布订阅模式类 TypeScript 设计模式之发布-订阅模式 观察模式和发布订阅模式区别...图解23种设计模式(TypeScript版)——前端必修内功心法 观察模式 vs 发布订阅模式 设计模式之发布订阅模式(1) 一文搞懂发布订阅模式 github - node/lib/events

1.1K20

Angular快速学习笔记(4) -- Observable与RxJS

介绍RxJS前,先介绍Observable 可观察对象(Observable) 可观察对象支持在应用中发布订阅之间传递消息。 可观察对象可以发送多个任意类型 —— 字面量、消息、事件。...订阅函数用于定义“如何获取或生成那些要发布或消息”。 要执行所创建可观察对象,并开始从中接收通知,你就要调用它 subscribe() 方法,并传入一个观察(observer)。...借助支持多播可观察对象,你不必注册多个监听器,而是复用第一个(next)监听器,并且把发送给各个订阅。...EventEmitter 扩展了 Observable,并添加了一个 emit() 方法,这样它就可以发送任意值了。...当你调用 emit() 时,就会把所发送传给订阅上来观察 next() 方法 @Component({ selector: 'zippy', template: ` <div class

5K20

《深入浅出Node.js》:Node异步编程解决方案 之 事件发布-订阅模式

事件发布-订阅模式 首先看事件发布-订阅模式,事件发布-订阅模式也叫观察模式或者事件监听器模式,是一种广泛用于异步编程设计模式,是回调函数事件化。...它具有addListener/on()、once()、removeListener()、removeAllListeners()、emit()等基本事件监听模式方法实现。...2.利用事件队列解决雪崩问题 在事件发布-订阅模式中,除了on()方法还有一个once()方法,通过它添加监听器只能执行一次,在执行之后就会将它与事件关联移除。...这个特性常常可以帮助开发过滤一些重复性事件响应。利用once()方法就可以解决雪崩问题。...而如果访问量巨大,同一句SQL会被发送到数据库中反复查询,会影响到服务整体性能。

1.3K30

几种常用设计模式简单示例

日常开发中,一些特定场景下你处理方法可能并不是很理想,往往这时借助一些设计模式可以让你优雅而高效实现这些逻辑,下面就介绍一些虽然不是最全但一定是最常用设计模式。...: 定义:订阅(Subscriber)把自己想订阅事件注册(Subscribe)到调度中心(Event Channel),当发布(Publisher)发布该事件(Publish Event)到调度中心...,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅注册到调度中心处理代码。...-订阅模式"); eventEmitter.emit("article2", "Javascript 观察模式"); eventEmitter.off("article1", user1); eventEmitter.emit...: Javascript 观察模式 //用户2订阅了: Javascript 发布-订阅模式 总结 学习设计模式不仅可以使我们用好这些成功设计模式,更重要是可以使我们深入理解面向对象设计思想。

55310
领券