簡體   English   中英

在Node.js中發出事件

[英]Emitting an event in Node.js

我有一個庫,該庫使用要嘗試編輯的套接字來發出事件,大致來說,代碼如下所示:

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 ,它仍然是一個空數組。 但是我正在努力發出一個事件。 我現在得到的是圖書館沒有辦法。 很明顯,我沒有以正確的方式添加發射器。 有人知道那是什么嗎?

您需要使用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;
});

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM