Node.js 向子对象发出事件

Node.js 向子对象发出事件,node.js,eventemitter,Node.js,Eventemitter,我正在编写一个nodejs模块,并尝试将事件发射器绑定到“scrasy.get”。看来我只能把它绑定到“好斗”。。。。所以“skispy.get(key).on('complete'..”不起作用 如何将事件发送到子对象“get” 我的NodeJS模块: var util = require('util'), EventEmitter = require('events').EventEmitter; function Scrappy(id) { } util.inheri

我正在编写一个nodejs模块,并尝试将事件发射器绑定到“scrasy.get”。看来我只能把它绑定到“好斗”。。。。所以“skispy.get(key).on('complete'..”不起作用

如何将事件发送到子对象“get”

我的NodeJS模块:

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

function Scrappy(id) {
}

util.inherits(Scrappy, EventEmitter);

Scrappy.prototype.get = function (key) {
  var self = this;
  self.emit('complete', "here");
  **return this;**
}

module.exports = Scrappy;
我的NodeJS应用程序代码:

var Scrappy = require('./scrappy.js')
var scrappy = new Scrappy("1234");

scrappy.get("name").on('complete', function(data){
    console.log("secondary");
});
结果:

scrappy.get("name").on('complete', function(data){
                    ^
TypeError: Cannot call method 'on' of undefined

编辑:已解决。添加“return this;”为我解决了问题。谢谢!

问题是您的
this
不同,因为您使用的是不同的函数。您需要将Srasky实例的
this
捕获到一个变量中,然后访问该变量:

Scrappy.prototype.get = function (key) {
  var self = this;
  redisclient.get(key, function(err, reply) {
    self.emit('complete', reply);
  });
};
另外,与使用
\uuuu proto\uuuu
等手动修改原型不同,node core通常使用的(以及许多模块开发人员使用的)是内置的
util.inherits()
。另一件事是,您不会从
get()
返回实例。下面是一个有这些更改的示例:

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

function Scrappy(id) {
}
util.inherits(Scrappy, EventEmitter);

Scrappy.prototype.sendToEngine = function(message) {

};
Scrappy.prototype.set = function(key, value) {

};
Scrappy.prototype.get = function(key) {
  var self = this;

  redisclient.get(key, function(err, reply) {
    self.emit('complete', reply);
  });

  return this;
};

module.exports = Scrappy;

嗯,似乎不起作用。在nodejs应用程序中,我仍然得到:scrasty.get(“name”)。on('complete',函数(数据){^TypeError:无法读取未定义的属性'on'。主要问题是,您没有从
get()
返回scrasty实例,以便能够调用
.on()
.mscdex,谢谢您的帮助,但它对我不起作用。我已经更新了我的问题以尽可能简化代码-仍然遇到同样的问题。