我有一个库,它使用我正在尝试编辑的套接字来发出一个事件,大致上代码如下所示:
function Library(port, host) {
this.myData = [];
this.socket = net.connect( ... );
this.socket.on('data', this._ondata.bind(this));
this.socket.on('error', this._onerror.bind(this));
this.socket.on('close', this._onclose.bind(this));
}
Library.prototype._ondata = function() {
//do stuff
//have the data we want
this.myData.push(stuff);
this.socket.end();
}
Library.protoype._onclose = function() {
console.log('this gets logged');
}
modules.export = Library;
我想在_onclose
方法中发出一个事件,以便我可以做类似
var lib = new Library(port, host);
lib.on('emitted-event', function() {
var data = lib.myData;
});
因为如果我直接访问lib.myData
它仍然是一个空数组。但我正在努力发布一个事件。我目前得到的是图书馆没有方法。很明显,我没有以正确的方式添加发射器。谁知道那是什么?
答案 0 :(得分:0)
您需要使用Node的内置事件库。
var EventEmitter = require('events').EventEmitter,
util = require('util');
function Library(port, host) {
(...)
}
Library.protoype._onclose() = function() {
this.emit('emitted-event');
}
util.inherits(Library, EventEmitter);
然后你会这样做:
var lib = new Library(port, host);
lib.on('emitted-event', function() {
var data = lib.myData;
});
答案 1 :(得分:0)
var EventEmitter = require('events').EventEmitter
var util = require('util')
function Library(port, host){
var self = this; //probably want to add this. if you call from any other function you want proper "this"
EventEmitter.call(this);
...
var myobj = { eaten: [burger, fries] };
self.emit('blurp', myobj);
}
util.inherits(Library, EventEmitter)
exports = module.exports = Library; // or new Library(); if you want a singleton