javascript發布訂閱pubsub模式
阿新 • • 發佈:2017-08-20
執行 遍歷 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模式