0

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

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

我正在尝试emit从 response.end 的回调内部、http.get 的回调内部处理事件。像这样:

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();

我不知道该怎么办。让我得到的是我可以访问_datavar server.parseDatainresp.end但我不能对服务器对象做同样的事情。

4

1 回答 1

2

这条线parseData没有做你所期望的:

var self = this;

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

_cb=this.parseData

由于你调用_cb()而不是this.parseData()this里面设置不正确parseData。这是 JavaScript 中的常见问题。您可以selfServer函数中设置,这将使在其中声明的所有方法都可以访问它,或者您可以绑定它:

_cb=this.parseData.bind(this)

当被调用时,这将导致this正确的事情。_cb

于 2013-12-19T16:40:32.650 回答