javascript - 自定义模块中的 EventEmitter 抛出“.on(...) 不是函数”
问题描述
我想从我的 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'));
你是 requiretest.js
模块node_modules
,有一个,因为你没有 MODULE_NOT_FOUND 错误,但这是你真正想要的文件,或者这应该是具有真实路径的本地文件const Test = new (require('./test.js'));
取消注释此行后Test.test('input');
,这不太可能记录任何内容,因为此代码发出test
事件并且您的代码testevent
仅在侦听。
一般来说,这段代码运行良好,这里是一个例子https://repl.it/repls/DiscreteUnwrittenNet
推荐阅读
- sql - 如何在大查询 SQL 中查找组之间的重叠
- c++ - 使用迭代器反转字符串
- asp.net - 如何在 .Net Core 3.1 应用程序中生成水晶报表
- node.js - 如何按客户最常用的方式过滤文档
- rust - 重新打开 AboutDialog 显示一个空白对话框
- swift - 当应用程序安装在设备上时如何在 iOS 中执行功能
- algorithm - 有向循环图如何具有“最远节点”?
- nix - 由于缺少 nixos 通道,nixos-rebuild 无法构建
- java - 当从同一个变量初始化一个新对象时,前一个对象是否会被删除?
- javascript - 单击时过滤具有多个条件的数组(复选框元素)