2012-04-16 86 views
0

事件處理程序在基於Node.js的項目,我有幾個對象:的Node.js安裝上新的

  • EmitterA
  • EmitterB
  • Consumer

Consumer「我有以下幾點:

var a = new EmitterA(); 
a.on('someEvent', someEventHandler); 

EmitterA的構造,我有以下幾點:

var self = this; 
var b = new EmitterB(); 
b.on('someEventFromB', function() { 
    self.emit('someEvent'); 
}); 

最後,在EmitterB的構造,我有這樣的事情:

this.emit('someEventFromB'); 

的問題是,ConsumersomeEventHandler()在從原始.emit()EmitterB被解僱時不會被解僱。原因是時機之一。 Consumer未訂閱someEventEmitterA直到事件已被解僱。

有沒有辦法在施工時附加事件處理程序?我曾考慮過使用newListener event,但稍後在處理多個偵聽器時會遇到問題,並且會觸發許多不同類型的事件。如果可能,我想避開這條路線,並且正在尋找您可能會建議的替代方案。謝謝!

回答

1

嘗試類似:

var a = new EmitterA({ 
    events : { 
     someEvent : someEventHandler 
    } 
}); 

function EmitterA(props){ 
    props || (props = {}); 

    if(props.events){ 
     for(var n in props.events){ 
      this.on(n, props.events[n]); 
     } 
    } 

    // the rest of the constructor code 
} 
+0

哈,是的,這將很好地工作。我不知道爲什麼我沒有想到這一點。謝謝! – Brad 2012-04-16 03:54:21

0

我只是想到了我的具體情況下工作的另一種方法,但可能別人是有問題的。請用一粒鹽來使用它。

EmitterB的構造函數,我改變this.emit('someEventFromB');這樣:

process.nextTick(function() { 
    this.emit('someEventFromB'); 
} 

參見:http://howtonode.org/understanding-process-next-tick