Node.js在新的上附加事件处理程序

时间:2012-04-16 03:44:11

标签: javascript events node.js javascript-events event-handling

在基于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 someEventHandler()来自.emit()的初始EmitterB被触发时不会被触发。原因之一是时机。 Consumer someEvent未在{<1}}之前订阅{<1}},直到事件被解雇后

有没有办法在构建时附加事件处理程序?我考虑过使用newListener event,但是在以后处理多个侦听器和情况时这会有问题哪里有许多不同类型的事件将被解雇。如果可能的话,我想避开这条路线,并且正在寻找您可能建议的替代方案。谢谢!

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

我只是想到了一种适合我特定情况的替代方法,但对其他人来说可能会有问题。请用一粒盐。

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

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

另请参阅:http://howtonode.org/understanding-process-next-tick