1
我是新的在这里,我有一个litle问题: 我怎样才能“合并”或“扩展”一个EventEmitter与另一个?NodeJS:“合并”两个EventEmitter,如:eventemitter2和HTTP服务器
我使用EventEmitter2使用命名空间,现在我将附加一个存在EvenEmitter到命名空间。
示例:dispatcher.attach(“namespace”,ee);
我对这个功能看起来像这样:
Dispatcher.prototype.attach = function(namespace, emitter) {
var that = this;
if (namespace && (typeof(emitter) === "object" && emitter._events)) {
//console.log("Attach EventEmitter, Namespace: '%s'", namespace);
Object.keys(emitter._events).forEach(function(event) {
var eventname = namespace + that.delimiter + event;
var listener = emitter._events[event];
// add single function
if (typeof(listener) === "function") {
var func = listener.bind(emitter);
that.on(eventname, func);
}
// add multiple functions
if (typeof(listener) === "object") {
for (var i = 0; i < listener.length; i++) {
var func = listener[i].bind(emitter);
that.on(eventname, func);
}
}
emitter.on(event, function(){
console.log(eventname, "=", event);
var parameter = [];
parameter.push(eventname);
parameter.push(arguments);
that.emit.apply(this, parameter);
});
});
console.log(that.listenerTree);
} else {
throw new Error("Wrong parameter: dispatcher.attach('namespace', emitter)");
}
让我解释一下:
问题是,当发射器(如例如HTTP服务器),发出一个请求,连接器或者甚至从EvenEmiter2发出的事件都不会被解雇。我于JavaScript/
的NodeJS新的目标是听&发出其他EventEmitter事件在命名空间是这样的:
dispatcher.on("http.request", function(req, res){
res.end("test");
});
相同的EMIT:
dispatcher.emit("idontknow.event", "Param1", "ParamN...");
谢谢!