我正在学习如何为个人项目执行爬虫(使用'cheerio')。爬行本身工作正常,但不知何故我正在构建的对象(eventDetails)没有被返回。您可以在下面看到,在功能级别声明的对象已正确填充请求,但不在其外部。你能帮忙吗?感谢。
function crawlEventDetails(eventLink){
var eventDetails = new Object();
//console.log(eventLink);
request(urlDomain + eventLink, function(err, response, html) {
if(err){
console.log(err);
}
else {
var $ = cheerio.load(html);
eventDetails.date = $('.detail.textsmall').eq(0).text();
eventDetails.time = $('.detail.textsmall').eq(1).text();
eventDetails.place = $('.detail.textsmall').eq(2).text();
eventDetails.price = $('.detail.textsmall').eq(3).text();
console.log(eventDetails); //OK!
}
});
console.log(eventDetails); //empty!
return eventDetails; // empty!
}
答案 0 :(得分:1)
在异步功能完成之前,您将返回该对象。看看发送处理程序。即:
function crawlEventDetails(eventLink, handler){
var eventDetails = new Object();
//console.log(eventLink);
request(urlDomain + eventLink, function(err, response, html) {
if(err){
console.log(err);
}
else {
var $ = cheerio.load(html);
eventDetails.date = $('.detail.textsmall').eq(0).text();
eventDetails.time = $('.detail.textsmall').eq(1).text();
eventDetails.place = $('.detail.textsmall').eq(2).text();
eventDetails.price = $('.detail.textsmall').eq(3).text();
console.log(eventDetails); //OK!
handler(eventDetails); // Send aka "return" to handler
}
});
}
// call `crawlEventDetails()` function, and
// send an anonymous function to handle the response
crawlEventDetails(something, function(details){
console.log(details);
});