javascript发布订阅pubsub模式

Posted 郑庙华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript发布订阅pubsub模式相关的知识,希望对你有一定的参考价值。

首先使用数组缓存订阅者订阅的消息,当订阅者订阅消息的时候,把订阅的消息push到指定消息的队列中,当发布者发布消息的时候,我们遍历执行push到指定消息队列中的回调事件。

var Pubsub=(function(){
    var eventObj={};
    return {
        subscribe:function(event,fn){
            eventObj[event]=fn
        },
        publish:function(event){
            if(eventObj[event]) eventObj[event]();
        },
        off:function(event,fn){
            if(eventObj[event]) eventObj[event]=null;
        }
    }
})()
Pubsub.subscribe(‘event‘,function(){
    console.log("正在执行,但是一个事件只能绑定一个操作");
})
Pubsub.publish("event");
//支持一个事件绑定多个操作
var Pubsub1=(function(){
    var quence={};//{‘type1‘:[],‘type2‘:[]}
    return {
        subscribe:function(event,fn){
            if(!quence[event]) quence[event]=[];
            quence[event].push(fn);
        },
        publish:function(event){
            var eventQuence=quence[event],
                len=eventQuence.length;
            if(len>0){
                eventQuence.forEach((item,index)=>{
                    item()
                })
            }
        },
        off:function(event,fn){
            var eventQuence = quence[event];
            if (eventQuence) {
                quence[event] = eventQuence.filter(function(item) {
                    return item !== fn;
                });
            }
        }
    }
})()
function first(){
    console.log("emit first")
}
function second(){
    console.log("emit second")
}
Pubsub1.subscribe(‘a‘,first)
Pubsub1.subscribe(‘a‘,second)
Pubsub1.off(‘a‘,first)//退订一个first事件
Pubsub1.publish("a");

 

以上是关于javascript发布订阅pubsub模式的主要内容,如果未能解决你的问题,请参考以下文章

P2P网络编程-3-案例实践:PubSub

是否可以直接在javascript中调用Pubsub的订阅拉取而不是调用java方法来获取数据?

发布-订阅模式与 UI 的可见性

订阅者的Spring pubsub过滤消息

如何立即触发 apollo graphql 订阅?

[已解决]Pubsub 推送订阅不确认消息