event与pubsub

author author     2022-08-03     330

关键词:

技术分享

如题,这两基本是一个东西,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... 查看详情