我有这个节点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();
出于某种原因,节点错误表明没有发出对象,我已经做了
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
而是通过执行var emitter = new EventEmitter()
实例化它然后在那之后,我在
util.inspect
中遇到有关必须是对象或为null的对象的错误。还没有成功。
最佳答案
我发现必须更改两个内容才能使第一个代码块正确运行:
显式实例化events.EventEmitter()
:var events = require('events'); var EventEmitter = new events.EventEmitter();
将呼叫更改为util.inherits
:util.inherits(pfioServer, events.EventEmitter);
使服务器运行的最后一件事是robertklep写道:在setTimeout()
中修复binding
setTimeout(this.watchInputs.bind(this), 10);
关于javascript - EventEmitter没有发射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21559771/