我有这个节点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/

10-12 07:12