我正在尝试在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,但我不能对服务器对象执行相同操作。
答案 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
成为正确的事。