NodeJS,回调地狱,从内部回调触发类事件

时间:2013-12-19 16:11:51

标签: node.js asynchronous asynccallback

我正在尝试在nodejs中编写一个可以这样调用的服务器:

server.getData()
    .on('complete', function(){
        console.log('on complete triggered');
    });

我正在尝试从{.1}来回调整回调内部的响应。在http.get的回调中。像这样:

emit

我迷失了该怎么做。我得到的是,我可以访问Server = function(){ events.EventEmitter.call(this); this.getData = function(fn){ var _cb; fn ? _cb=fn: _cb=this.parseData; https.get('https://api.example.com', _cb); return this; } this.parseData = function(resp, fn){ var _data = ''; var self = this; resp.setEncoding('utf8'); resp.on( 'data', function(chunk){ _data += chunk; }); resp.on( 'end', function(){ var j = JSON.parse(_data); self.emit('complete'); console.log(j); if(fn) fn(j); }); } } util.inherits(Server, events.EventEmitter); server = new Server(); _data中的server.parseData var,但我不能对服务器对象执行相同操作。

1 个答案:

答案 0 :(得分:2)

parseData中的这一行没有达到预期效果:

var self = this;

因为,此时this是全局对象。设置时会在getData中出现问题:

_cb=this.parseData

由于您拨打_cb()而不是this.parseData()this内的parseData未正确设置。这是JavaScript中的常见问题。您可以在self函数中设置Server,这将在其中声明的所有方法都可以访问它,或者您可以绑定它:

_cb=this.parseData.bind(this)

这会在调用this时使_cb成为正确的事。