处理来自EventEmitter子项的所有消息

时间:2013-07-11 10:55:31

标签: node.js eventemitter

我有一个继承自EventEmiter“class”的对象。

它有很多事件(emitter.on),我不知道他们的名字 我怎样才能得到他们的名字?我怎样才能处理所有事件?

2 个答案:

答案 0 :(得分:2)

您无法以编程方式获取将在特定事件发射器上发出的所有可能事件。但是,您可以通过阅读源代码来实现此目的。

我知道,在运行时处理所有事件的唯一方法是覆盖那个EventEmitter的emit函数。每当发出一个事件时,你的代码就会被调用,你可以将它转发给原始函数。

var EventEmitter = require("events").EventEmitter

var emitter = new EventEmitter();

emitter.on('test', function(t) {
    console.log('Handled test', t);
});

var old_emit = emitter.emit;
emitter.emit = function() {
    console.log("Intercepted", arguments);
    old_emit.apply(emitter, arguments);
}

emitter.emit('test', 'hi');
emitter.emit('something', 'else');

演示:http://ideone.com/RfqFvx

答案 1 :(得分:1)

EventEmitter也有自己的事件,其中之一:newListener,它将在添加新的侦听器时传递事件名称和回调函数。

此外,您可以使用emitter.listeners获取特定事件名称的回调函数列表。

您可能想要使用一个事件名称,并发送带有对象名称标识的对象,这样您就可以拥有一个事件,但对它的响应会有所不同。