2014-11-14 2 views
0

에서 이벤트 발광 내가 이벤트를 방출하는 편집하기 위해 노력하고있어 소켓을 사용하는 라이브러리를 가지고 광범위하게 코드는 다음과 같습니다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; 

내가에서 이벤트를 방출 할 난 그냥 바로 lib.myData에 액세스하는 경우가 여전히 빈 상태 (empty)의 배열이기 때문에이

var lib = new Library(port, host); 
lib.on('emitted-event', function() { 
    var data = lib.myData; 
}); 

처럼 뭔가를 할 수 있도록 _onclose 방법. 하지만 나는 사건을 일으키기 위해 고심하고있다. 내가 지금 얻고있는 것은 도서관에 방법이 없다는 것이다. 그래서 명확하게 나는 에미 터를 올바른 방법으로 추가하지 않을 것입니다. 누구가 그게 뭔지 알아?

+1

http://www.sitepoint.com/nodejs-events-and-eventemitter/ – bryanmac

+0

'this.MyData.push (물건)''해야 this.myData.push (물건); ' – SergioFilhow

답변

0

노드의 내장 이벤트 라이브러리를 사용해야합니다.

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; 
}); 
+0

좋아,이게 나보다 복잡해지고있어. 'this.socket' 줄은'this.socket = net.connect (port, host, this._onsocketConnected.bind (this));'이며 결과를'TypeError : 메소드 'bind'를 호출 할 수 없습니다. 정의되지 않은'. 그래서'Library.prototype._onsocketConnected()'가 정의되지 않았습니까? –

+0

'new'를 사용하여 생성자를 호출하고 있습니까? 프로토 타입이 생성자의 일부이기 때문에해야 할 일이 있습니다. –

+0

예, 나는'this.myData'를 반환하는 라이브러리 자체에 메소드를 추가하는 것이 더 쉬울 수도 있지만 소켓이 닫힌 경우에만 더 쉽다고 생각합니다. 그렇다면'var lib = new Library (...);와 같은 것을 할 것입니다. var data = lib.getData();'그게 더 쉬울 수도 있습니다. –

0

벤 포춘의 대답은 작동합니다. Howeever :

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