node.js - Emit an event to a child object -
i'm writing nodejs module , trying bind event emitter "scrappy.get". seems can bind "scrappy" .... "scrappy.get(key).on('complete'...." not work.
how send event child object 'get'?
my nodejs module:
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;
my nodejs app code:
var scrappy = require('./scrappy.js') var scrappy = new scrappy("1234"); scrappy.get("name").on('complete', function(data){ console.log("secondary"); });
result:
scrappy.get("name").on('complete', function(data){ ^ typeerror: cannot call method 'on' of undefined
edit: solved. adding "return this;" solved me. thank you!
the problem this
different because you're in different function. need instead capture scrappy instance's this
variable , access instead:
scrappy.prototype.get = function (key) { var self = this; redisclient.get(key, function(err, reply) { self.emit('complete', reply); }); };
also, instead of manually mutating prototype __proto__
, such, typically node core uses (and many module developers use) built-in util.inherits()
. other things you're not returning instance get()
. here's example these changes:
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;
Comments
Post a Comment