Javascript函数返回没有对象

时间:2017-11-25 19:17:04

标签: javascript return cheerio

我正在学习如何为个人项目执行爬虫(使用'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 :(得分: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);
});