自定义模块内的EventEmitter抛出'.on(…)不是函数'

问题描述 投票:0回答:1

我想从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');,该错误就会消失,根据我看到的已记录行,该事件似乎正在发出。但为什么?如果禁用该行,为什么会引发该错误?我们在做什么错?

javascript node.js events eventemitter
1个回答
0
投票

使用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

© www.soinside.com 2019 - 2024. All rights reserved.