在node.js中,如何判断发出事件的来源?

有没有办法从事件处理程序callback中告诉哪个函数和/或对象发出(调用)事件?

这是一个示例程序:

var EventEmitter, ee, rand, obj; EventEmitter = require("events").EventEmitter; ee = new EventEmitter(); ee.on('do it', cFunc); obj = { maybeMe: true, emitting: function() { ee.emit('do it'); } } function aFunc() { ee.emit('do it'); } function bFunc() { ee.emit('do it'); } function cFunc() { console.log('Who called me to do it? aFunc or bFunc or obj (obj.emitting)?'); } rand = Math.random(); if (rand < .3) { aFunc(); } else if (rand < .6) { bFunc(); } else { obj.emitting(); } 

此外,如果发出的事件的来源是来自模块中构build的node.js,则另一个用法。 例如,“错误”事件。 如果我使用常见的callback进行error handling,那么这个callback是否可以知道是谁发出了调用它的事件呢?

这里有一个解决你的特定例子:

 function cFunc() { var caller = new Error().stack.split("\n")[3].trim().substring(3).split(" (")[0]; console.log('Who called me to do it? aFunc or bFunc or obj (obj.emitting)?'); console.log(caller); } 

说明

我们使用Error获取当前堆栈( 更多信息 )。 堆栈被表示为一个string – 第四行表示调用函数。

是的, this事件监听器函数将引用发出该事件的EventEmitter对象。 一般来说,使用this可能不是一个好主意,因为它可能不代表您感兴趣的完整对象,而是可以通过闭包引用原始对象,如下所示:

 object.on('event', function() { var value = object.value; });