Node.js 向子对象发出事件
我正在编写一个nodejs模块,并尝试将事件发射器绑定到“scrasy.get”。看来我只能把它绑定到“好斗”。。。。所以“skispy.get(key).on('complete'..”不起作用 如何将事件发送到子对象“get” 我的NodeJS模块: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
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,谢谢您的帮助,但它对我不起作用。我已经更新了我的问题以尽可能简化代码-仍然遇到同样的问题。