gpt4 book ai didi

javascript - 使用 EventEmitter 而不是回调?

转载 作者:行者123 更新时间:2023-12-03 11:25:57 31 4
gpt4 key购买 nike

我有一个代码可以进行ajax调用,它有一个回调。有没有办法用事件发射器替换回调

下面是我的代码

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

最佳答案

Is there a way i can replace the callback with an event emitter.

是的。事实上,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));
});
}

Is it possible to replace the callback with 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));
})

Next callbacks are always pain... that's the reason...

我认为您真正要找的是 promises 。当然,他们是still callbacks (就像事件发射器一样),但它们的可组合性要高得多。

关于javascript - 使用 EventEmitter 而不是回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26915600/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com