0

在基于 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');

问题是Consumer'ssomeEventHandler()在初始.emit()fromEmitterB被触发时不会被触发。原因之一是时机。 直到事件被触发后才Consumer订阅someEventEmitterA

有没有办法在构建时附加事件处理程序? 我已经考虑过使用newListenerevent,但是在以后使用多个侦听器以及将触发许多不同类型的事件的情况下,这将是一个问题。如果可能,我想避免这条路线,并正在寻找您可能建议的替代方案。谢谢!

4

2 回答 2

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
}
于 2012-04-16T03:53:20.883 回答
0

我只是想到了一种适用于我的具体情况的替代方法,但对其他人来说可能会有问题。请与一粒盐一起使用。

EmitterB的构造函数中,我改为this.emit('someEventFromB');

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

另见: http ://howtonode.org/understanding-process-next-tick

于 2012-04-16T03:55:56.380 回答