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

标签 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();
}

此外,如果发出的事件源来自 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);
}

解释

我们使用 Error 获取当前堆栈 ( more info )。堆栈表示为字符串 - 第四行表示调用函数。

关于javascript - 在 node.js 中,如何判断发出的事件的来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22886547/

相关文章:

javascript - vs code IntelliSense 不适用于 webpack 包

javascript - Node.js 目录中的冒号是什么意思?

node.js - 我应该如何根据 Gruntfile.js 重写 Makefile?

javascript - 如何在 Javascript 中获取以前的日期?

javascript - 犀牛中的jquery

php - 使用 AJAX 从 MySQL 获取数据

javascript - 如何在 react-native 中禁用 ssl 证书验证

mysql - 如何在EXPRESSJS/MYSQL中获取父子关系?

java - MVC 或 Rest 或两者

javascript - Highcharts chart.tooltip.formatter 覆盖 series.tooltip.pointFormatter?