在Node.js中发出一个事件

时间:2014-11-14 12:54:42

标签: node.js events

我有一个库,它使用我正在尝试编辑的套接字来发出一个事件,大致上代码如下所示:

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它仍然是一个空数组。但我正在努力发布一个事件。我目前得到的是图书馆没有方法。很明显,我没有以正确的方式添加发射器。谁知道那是什么?

2 个答案:

答案 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)

Ben Fortune的回答是有效的。但是:

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