[英]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.