无法处理请求和异步NPM,也是JS的新手。
var queries = getURLS();
async.map(queries, function(url, callback) {
var options = {
url: url,
proxy: config.ProxuURL + ":" + config.ProxyPort,
headers: {
'SwitchProxy': location,
'User-Agent': getUA()
},
resolveWithFullResponse: true
};
request(options, function (err, res, body){
if (!err && res.statusCode === 200) {
var urls = [];
var $ = cheerio.load(body);
$('h3.r a').each(function(i) {
urls[i] = getDomain($(this).attr('href'));
});
//How do I return urls so I can access it outside of the async loop?
}
});
});
如果我在console.log(urls)中收到10个域名数组,我想将它们汇总到一个主列表中,以便我可以解析它。
答案 0 :(得分:0)
您需要做的只是将回调函数添加到async.map()
并在那里查找结果。此外,为了使您的回调函数获取值,您需要返回回调,并返回您想要返回的数据。
var queries = getURLS();
async.map(queries, function(url, callback) {
var options = {
url: url,
proxy: config.ProxuURL + ":" + config.ProxyPort,
headers: {
'SwitchProxy': location,
'User-Agent': getUA()
},
resolveWithFullResponse: true
};
request(options, function (err, res, body){
if (err)
return callback(err, null);
if (!err && res.statusCode === 200) {
var urls = [];
var $ = cheerio.load(body);
$('h3.r a').each(function(i) {
urls[i] = getDomain($(this).attr('href'));
});
// return urls back to async.map()
return callback(null, urls);
}
});
}, function(err, results) {
if (err)
console.log(err);
else
console.log(results) // Array of all URL Arrays returned from each queries iteration
});