在基于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,但是在以后处理多个侦听器和情况时这会有问题哪里有许多不同类型的事件将被解雇。如果可能的话,我想避开这条路线,并且正在寻找您可能建议的替代方案。谢谢!
答案 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');
}