我有一个进行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);
答案 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(就像事件发射器一样),但它们更具组合性。