gpt4 book ai didi

javascript - EventEmitter 没有发出

转载 作者:行者123 更新时间:2023-11-28 20:01:42 24 4
gpt4 key购买 nike

我有这个 Node js脚本:

var EventEmitter = require('events').EventEmitter,
util = require('util');

var pfioObject = function () {
this.init = function () {
console.log("started server");
};
this.deinit = function () {
console.log("stopped server");
};
this.read_input = function () {
return 0;
};
};
console.log(util.inspect(EventEmitter, false, null)); //<--- this shows no method emit either

var pfio = new pfioObject();

var pfioServer = function () {
this.prev_state = 0;
this.start = function () {
pfio.init();
this.watchInputs();
};

this.stop = function () {
pfio.deinit();
};
}

util.inherits(pfioServer, EventEmitter);

// add some event emitting methods to it
pfioServer.prototype.watchInputs = function () {
var state = pfio.read_input();

if (state !== this.prev_state) {
this.emit('pfio.inputs.changed', state, this.prev_state);
this.prev_state = state;
}

setTimeout(this.watchInputs, 10); // going to put this on the event loop next event, more efficient
};

// export the object as a module
module.exports = new pfioServer();

出于某种原因, Node 错误表明不存在“emit”这样的对象,我已经执行了npm install events来查看是否可以修复它,但没有。我不确定为什么会收到此错误。

我认为我的代码中的某个地方有错误,但我看不到任何内容。

为了运行此代码,我有另一个脚本来执行此操作:

var pfioServer = require('./pfioServer'),
util = require('util');

console.log(util.inspect(pfioServer, false, null)); //<--- this line shows the pfioServer with out the prototype function watchInputs

pfioServer.start();

编辑

我想我可能错过了有关事件发射器内容的一些重要代码,正在研究事件发射器类的实例化

略有变化

因此,我没有继承 EventEmitter,而是通过执行 varemitter = new EventEmitter()

来实例化它

然后,我在 util.inspect 中收到关于对象必须是对象或为 null 的错误。

尚未成功。

最佳答案

我发现必须更改两件事才能使第一个代码块正常运行:

  • 显式实例化 events.EventEmitter():

var events = require('events'); var EventEmitter = new events.EventEmitter();

  • 更改对 util.inherits 的调用:

util.inherits(pfioServer, events.EventEmitter);

让服务器运行的最后一件事是 robertklep写道:修复bindingsetTimeout()

setTimeout(this.watchInputs.bind(this), 10);

关于javascript - EventEmitter 没有发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21559771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com