Я изучаю, как сделать искателя (используя "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!
}
Вы возвращаете объект до завершения функции async. Посмотрите на отправку обработчика. то есть:
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);
});