我有一个需要抓取网站并返回地址列表的功能。在来自scrape的回调中,对于返回的每个地址,我需要做另一个抓取操作然后处理数据,然后我想返回整个已处理的集合。如果必须,我不介意阻止。最终,我必须使用整个集合的JSON对象。这有可能,我该怎么做?
function doSomething(req, res){
var collection = [];
scrape1(params, function(error, addresses){
if(!error){
for(var i in addresses){
//do some stuff with addresses here
scrape2(otherparams, function(error, address, data){
//manipulate the data here
collection.push({ 'address' : address, 'data' : data})
});
}
//this just returns an empty set obviously
res.json(collection);
//how can I return the entire collection from this function?
}
});
}
答案 0 :(得分:2)
这是使用async模块的一个解决方案:
function doSomething(req, res){
var collection = [];
scrape1(params, function(error, addresses){
if (error)
return console.error(err); // handle error better
async.each(addresses, function(address, callback) {
scrape2(otherparams, function(err, address, data){
// manipulate the data here
if (err)
return callback(err);
collection.push({ 'address' : address, 'data' : data});
callback();
});
}, function(err) {
if (err)
return console.error(err); // handle error better
res.json(collection);
});
});
}