Javascript Node.js将事件处理程序附加到新
在基于Node.js的项目中,我有两个对象:Javascript Node.js将事件处理程序附加到新,javascript,events,node.js,javascript-events,event-handling,Javascript,Events,Node.js,Javascript Events,Event Handling,在基于Node.js的项目中,我有两个对象: EmitterA EmitterB 消费者 在消费者的构造函数中,我有以下内容: var a = new EmitterA(); a.on('someEvent', someEventHandler); var self = this; var b = new EmitterB(); b.on('someEventFromB', function() { self.emit('someEvent'); }); 在EmitterA的构造
EmitterA
EmitterB
消费者
var a = new EmitterA();
a.on('someEvent', someEventHandler);
var self = this;
var b = new EmitterB();
b.on('someEventFromB', function() {
self.emit('someEvent');
});
在EmitterA的构造函数中,我有以下内容:
var a = new EmitterA();
a.on('someEvent', someEventHandler);
var self = this;
var b = new EmitterB();
b.on('someEventFromB', function() {
self.emit('someEvent');
});
最后,在EmitterB的构造函数中,我有如下内容:
this.emit('someEventFromB');
问题在于,当从EmitterB
启动inital.emit()
时,消费者的someEventHandler()
不会被触发。原因之一是时机<代码>消费者不会订阅EmitterA
上的someEvent
,直到事件触发后
是否有一种在构建时附加事件处理程序的方法?我考虑过使用,但在以后处理多个侦听器时,以及在有许多不同类型的事件将被触发的情况下,这将是一个问题。如果可能的话,我想避开这条路线,我正在寻找你可能建议的替代方案。谢谢 试试以下方法:
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
}
我只是想到了一种对我的具体情况有效的替代方法,但对其他人可能会有问题。请加一粒盐使用 在
EmitterB
的构造函数中,我更改了this.emit('someEventFromB')代码>到此:
process.nextTick(function() {
this.emit('someEventFromB');
}
另请参见:Ha,是的,这很有效。我不知道为什么我一开始没有想到这一点。谢谢