关键词:
如题,这两基本是一个东西,Event是绑在对象上的,PubSub针对全局。
使用Event完全可以代替PubSub的工作。我就这么干过,比如 export default new Miku.Event()
所以说只要妹妹(Event)就可以了,并不需要姐姐(PubSub)!
一个Event对象
const Event = { evs:{} ,on(s,f){ return !this.evs[s] ?this.evs[s]=[f]: this.evs[s].push(f); } //.. }; const o = {}; Object.assign(o,Event); o.on(‘miku-miku-miku‘,_=>{});
最初用这种模式的时候,我就是用的上面那代码。但这么做evs对象就暴漏了出来,没法保证evs对象不被覆盖,这会产生冲突!
我们可以对这个对象加一层闭包,在Event对象相关方法的作用域中添加一个变量。
const MxEvent = o=>{ const evs = Object.create(null); const Event = { on(s,f){ return !evs[s] ?evs[s]=[f]: evs[s].push(f); } //... }; return Object.assign(o,Event); }
现在这样子基本没问题了。。但还是有坑,如果这个o对象被用作了原型对象,或者用作了assign的target,那么它的相关Event绑定的事件也被继承了下去,订阅的事件就混在一起了!
所以Event相关方法要是不可枚举的 ,最终这么写。
const MxEvent = o=>{ const evs = Object.create(null); return Object.defineProperties(o , { on : { value(s,f){ return !evs[s] ?evs[s]=[f]: evs[s].push(f); } ,writable:true } //... }) } const o = MxEvent({}); o.on(‘miku-miku-miku‘,_=>_); const o2 = MxEvent(Object.assign(o,{b:‘b‘})); //并不会对o发布 o2.trigger(‘miku-miku-miku‘);
我代码没写全,trigger不想写了(实现很简单)。。上面这段代码仅针对es5+的浏览器,现在普及也还好吧?
完整的Event还有remove、once等方法,可能需要命名空间划分的功能,这些都可以实现的。我就不写了,主要是扯了一下Event模式的封装~
如何正确接收 Pubsub JSON 数据?
】如何正确接收PubsubJSON数据?【英文标题】:HowtocorrectlyreceivePubsubJSONdata?【发布时间】:2021-11-1106:06:00【问题描述】:我有一个带有云功能的GCP管道设置,可以接收PubSub消息。问题是每次我向云函数发布消息(一个json字符串)... 查看详情
每个用户的 GCP PubSub(或 GCP 任务)同步处理
】每个用户的GCPPubSub(或GCP任务)同步处理【英文标题】:GCPPubSub(orGCPTasks)SynchronousProcessingperUser【发布时间】:2021-03-0419:26:29【问题描述】:我有一个需要处理一组事件的用例。我需要他们对每个用户进行整体并行处理但串行... 查看详情
Spring 集成 pubsub 与 Spring amqp RabbitMQ pubsub
】Spring集成pubsub与SpringamqpRabbitMQpubsub【英文标题】:SpringintegrationpubsubvsSpringamqpRabbitMQpubsub【发布时间】:2015-12-2402:24:51【问题描述】:我正在开发一个MicroBlogspringmvchibernate应用程序。我需要实现像twitter这样的发布订阅功能。我... 查看详情
Python - 信号与 pubsub 有何不同?
】Python-信号与pubsub有何不同?【英文标题】:Python-Howaresignalsdifferentfrompubsub?【发布时间】:2011-07-0902:38:03【问题描述】:Django和Flask使用信号——后者使用Blinker库。在Python、Blinker和Pythonpubsub库的上下文中,信号和pubsub如何比较... 查看详情
vue2.0—消息订阅与发布pubsub(二十)
【Vue2.0】—消息订阅与发布pubsub(二十) 查看详情
javascript优雅的pubsub与jquery(代码片段)
将 pubsub 与 golang 一起使用:ocgrpc.NewClientStatsHandler
】将pubsub与golang一起使用:ocgrpc.NewClientStatsHandler【英文标题】:Usingpubsubwithgolang:ocgrpc.NewClientStatsHandler【发布时间】:2018-08-2713:13:52【问题描述】:我正在按照本教程将主题从golang项目发布到Pub/Sub,这是我目前为该项目提供的... 查看详情
Dapr PubSub 与 dotnet SDK
】DaprPubSub与dotnetSDK【英文标题】:DaprPubSubwithdotnetSDK【发布时间】:2021-12-1019:09:46【问题描述】:我正在尝试使用dotnet运行基本的Dapr设置。我关注了文档和示例项目,但现在没有运气。我用net5.0创建了一个简单的dotnetWebAPI应用... 查看详情
Google PubSub Pull 与 Streaming Pull 的区别
】GooglePubSubPull与StreamingPull的区别【英文标题】:GooglePubSubPullvsStreamingPulldifferences【发布时间】:2019-10-0502:05:50【问题描述】:我正在阅读来自Google的documentation关于拉取与流拉取的内容,但不太明白。有人可以向我解释其中的区... 查看详情
将频道与 google pubsub poll 订阅者一起使用
】将频道与googlepubsubpoll订阅者一起使用【英文标题】:usingchannelswithgooglepubsubpollsubscriber【发布时间】:2019-01-1400:05:00【问题描述】:我正在尝试在golang中创建一个googlepubsub订阅者,我一次接收100条消息,然后将它们写入influx。... 查看详情
让频道与 Python-socketio 中的房间一致,以及一般的 pubsub 问题
】让频道与Python-socketio中的房间一致,以及一般的pubsub问题【英文标题】:HavechannelscoincidewithroomsinPython-socketio,andgeneralpubsubquestions【发布时间】:2021-11-1022:56:50【问题描述】:我正在使用python-socketio处理一个涉及websockets的项目... 查看详情
从 Memorystore Redis PubSub 消息触发 Cloud Run API
】从MemorystoreRedisPubSub消息触发CloudRunAPI【英文标题】:TriggeringCloudRunAPIfromaMemorystoreRedisPubSubMessage【发布时间】:2021-12-2804:20:24【问题描述】:我有一个在GCPMemorystore中运行的Redis实例,并且我在这个实例上启用了notify-keyspace-events... 查看详情
vue中的发布与订阅(代码片段)
1.安装pubsub.js: npminstall--savepubsub-js 安装完成后,会在项目的package.json文件中显示pubsub-js插件,如下:"dependencies":"animate.css":"^3.7.2","moment":"^2.24.0","pubsub-js":"^1.8.0","shortid":"^2.2.15","vue":"^2.5.2","vue-router":"^3.0.1",2.导入使用 i... 查看详情
谷歌云 pubsub node.js 客户端与谷歌云功能不兼容
】谷歌云pubsubnode.js客户端与谷歌云功能不兼容【英文标题】:googlecloudpubsubnode.jsclientnotcompatiblewithgooglecloudfunctions【发布时间】:2018-07-1509:26:02【问题描述】:架构:我们有一个使用2个发布订阅主题/订阅对的架构:主题T1由cronjo... 查看详情
asmack pubsub getItems 错误
】asmackpubsubgetItems错误【英文标题】:asmackpubsubgetItemserror【发布时间】:2013-01-1413:27:58【问题描述】:我正在尝试使用Pubsub节点将一些信息发布到服务器。不幸的是,我未能检索到之前发布的节点。与以下链接中的问题非常相似... 查看详情
如何使用个人 (gcloud) 凭据发布到 PubSub
】如何使用个人(gcloud)凭据发布到PubSub【英文标题】:HowtopublishtoPubSubusingpersonal(gcloud)credentials【发布时间】:2020-06-2202:35:19【问题描述】:我正在尝试使用与gcloudCLI相同的凭据向GCPPubSub发布消息,但没有取得很大成功。我可以通... 查看详情
vue--全局事件总线&&消息订阅与发布(pubsub)
参考技术A 1.一种组件间通信的方式,适用于任意组件间通信 2.安装全局事件总线: newVue( ...... beforeCreate... 查看详情
Google PubSub 模拟器是不是可以与 Google Cloud Pub/Sub API 客户端库一起使用?
】GooglePubSub模拟器是不是可以与GoogleCloudPub/SubAPI客户端库一起使用?【英文标题】:DoestheGooglePubSubEmulatorworkwiththeGoogleCloudPub/SubAPIClientLibrary?GooglePubSub模拟器是否可以与GoogleCloudPub/SubAPI客户端库一起使用?【发布时间】:2017-06-181... 查看详情