使用EventEmitter而不是回调?

时间:2014-11-13 18:09:41

标签: javascript node.js events

我有一个进行ajax调用的代码,其中有一个callback。有没有办法可以用callback替换event emitter

以下是我的code

 var _getPoll = function(params){
    var url = "http://localhost/poll"

    console.log(url);

    request({
        headers: {
            accept: 'application/json'
        },
        uri: url,
        method: 'GET'
    }, function(err, response, body){
        body = JSON.parse(body);
        console.log(body);
    })
}

是否可以使用如下的EventEmitter替换回调。

function(err, response, body){
    body = JSON.parse(body);
    console.log(body);
}

替换

this.emit('jsonResponse', err, response, body);

1 个答案:

答案 0 :(得分:1)

  

有没有办法可以用事件发射器替换回调。

是。实际上,request已经确实返回一个事件发射器。您可以收听它,而不是将回调直接传递到request()来电。一旦响应流结束,它将与正文一起发出complete事件。

 function _getPoll(params) {
    var url = "http://localhost/poll";

    console.log(url);

    request({
        headers: {
            accept: 'application/json'
        },
        uri: url,
        method: 'GET'
    }).on("complete", function(response, body) {
        console.log(JSON.parse(body));
    });
}
  

是否可以用this.emit('jsonResponse', err, response, body)

替换回调

我不确定你的意思是否合适。不,除了不同的回调之外,你不能用任何东西替换回调。您无法传递偶数发射器对象,也无法传递调用this.emit('jsonResponse', err, response, body)的结果。您可以执行类似

的操作
var e = new EventEmitter();
request({…}, function(err, response, body){
    if (err)
        e.emit("error", err)
    else
        e.emit('jsonResponse', response, JSON.parse(body));
})
  

接下来的回调总是很痛苦......这就是原因......

我认为你真正想要的是promises。当然,他们是still callbacks(就像事件发射器一样),但它们更具组合性。