標籤:item dex each 訊息佇列 log pre [] pubsub scribe
首先使用數組緩衝訂閱者訂閱的訊息,當訂閱者訂閱訊息的時候,把訂閱的訊息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模式