1. 程式人生 > >javascript發布訂閱pubsub模式

javascript發布訂閱pubsub模式

執行 遍歷 log 訂閱 ons mit asc 訂閱者 foreach

首先使用數組緩存訂閱者訂閱的消息,當訂閱者訂閱消息的時候,把訂閱的消息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模式