Функция Javascript, не возвращающая объект

1

Я изучаю, как сделать искателя (используя "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!
}
  • 1
    Потратьте некоторое время, чтобы понять функции обратного вызова. Есть много ресурсов, доступных в сети.
  • 0
    Да, я безуспешно пытался использовать обратные вызовы и / или изучать async / await. Я сделаю больше исследований, спасибо.
Теги:
return
cheerio

1 ответ

1

Вы возвращаете объект до завершения функции 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);
});
  • 0
    Я попробовал это однажды, я дам вам знать, если я справлюсь, сделайте это. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню