cis*_*iso 6 javascript node.js
有没有办法从事件处理程序回调中判断哪个函数和/或对象发出(调用)该事件?
这是一个示例程序:
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();
}
Run Code Online (Sandbox Code Playgroud)
另外,如果发出的事件的源来自内置模块的 Node.js,则还有另一种用途。例如,“错误”事件。如果我使用通用回调进行错误处理,该回调可以知道谁发出了调用它的事件吗?
这是针对您的特定示例的解决方案:
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);
}
Run Code Online (Sandbox Code Playgroud)
我们用来Error获取当前堆栈(更多信息)。堆栈表示为字符串 - 第四行表示调用函数。
| 归档时间: |
|
| 查看次数: |
1968 次 |
| 最近记录: |