EventEmitter внутри пользовательского модуля, выбрасывающий «.on (...) не является функцией» - PullRequest
0 голосов
/ 11 января 2020

Я хочу отправлять события из моего 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'); не закомментировано, и, как я вижу, записанная строка выдает событие. Но почему? Почему выдает эту ошибку, если линия отключена? Что мы делаем не так?

1 Ответ

0 голосов
/ 11 января 2020

Используя const Test = new (require('test.js'));, вам требуется test.js модуль из node_modules, и он есть, потому что у вас нет ошибки MODULE_NOT_FOUND, но это действительно тот файл, который вам действительно нужен, или, возможно, это должен быть локальный файл с действительный путь const Test = new (require('./test.js'));

После раскомментирования этой строки Test.test('input'); вряд ли что-либо будет регистрироваться, поскольку этот код генерирует событие test, а ваш код прослушивает только testevent.

In В общем, этот код работает хорошо, вот пример https://repl.it/repls/DiscreteUnwrittenNet

...