2012-04-16 83 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