[英]Multiple async http get requests
我在Node.js中遇到异步事件。
我的应用程序正在执行第一个HTTP GET请求,然后根据在响应正文中找到的一些信息循环一定次数。
在每次迭代时,它调用一个函数,该函数发送其他HTTP GET请求并返回在elements数组中推送的结果。
我的问题是,当完成所有http请求时,我想要console.log()
元素数组。 这是我的代码:
http.get('mysite.com', function(res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
var last = 5,
elements = [];
for(var i=0; i < last; i++) {
elements.push(myRequest(i));
}
console.log(elements);
// Do some stuff with the elements array after it has been populated
});
}).on('error', function(error) {
console.log(error);
});
var myRequest = function(i) {
http.get('mysite.com/page' + i, function(res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
// Do parsing here
return parsed;
});
}).on('error', function(error) {
console.log(error);
});
};
我想过使用异步模块,但我不确定如何在这个用例中使用它。
提前致谢 !
我会使用异步库,也许使用队列。 但是如果你想手工完成它,而不是在下面测试任何东西而不是真的确定它是最干净的方式,但它可能会给你一些想法。
将回调传递给您的请求函数:
var myRequest = function(i, cb){
...
res.on('end', function(){
cb(parsed);
});
}
以上onEnd-call看起来更像是这样的:
var last = 5, elements = [];
var rep = function(i){
if( i < last ){
myRequest(i, function( result ){
elements.push(result);
rep(i+1);
});
} else {
console.log(elements);
// Do some stuff with the elements array after it has been populated
}
}
res.on('end', function() {
rep(0);
});
使用async会看起来更好看。 我现在要跑了...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.