我想从Nodejs模块发出事件,但是由于出现错误,它无法按预期方式工作:Uncaught TypeError: Test.on(...) is not a function
。
这里是模块test.js
var util = require("util");
var EventEmitter = require("events").EventEmitter;
function Test() {
EventEmitter.call(this);
}
Test.prototype.test = function (input) {
this.emit("testevent", input);
};
util.inherits(Test, EventEmitter);
module.exports = Test;
在index.js
中,我们有以下内容:
const Test = new (require('./test.js'));
Test.on('testevent', function (test) {
console.log('emitted', test);
});
// Test.test('input');
我仅理解index.js
中的代码,因为不调用Test.test('input');
,所以该事件永远不会发出。
但是,在禁用该行的情况下,我对为何获得Uncaught TypeError: Test.on(...) is not a function
感到困惑。
一旦取消注释Test.test('input');
,该错误就会消失,根据我看到的已记录行,该事件似乎正在发出。但为什么?如果禁用该行,为什么会引发该错误?我们在做什么错?
使用const Test = new (require('test.js'));
,您需要test.js
中的node_modules
模块,并且其中一个是因为您没有MODULE_NOT_FOUND错误,但这是您真正想要的文件,还是应该是具有实际意义的本地文件路径const Test = new (require('./test.js'));
取消注释此行Test.test('input');
后,这不太可能记录任何内容,因为此代码会发出test
事件,并且您的代码仅在侦听testevent
。
通常,此代码运行良好,下面是一个示例https://repl.it/repls/DiscreteUnwrittenNet