包含请求

时间:2016-09-15 22:44:08

标签: javascript arrays node.js callback

我试图返回食谱数组,但它似乎是空的。我猜这是因为回调正在执行循环之前执行。在这种情况下,我如何使用cheerio循环来解决这个问题?

function scrapeNow(url, callback) {

  request(url, function(error, response, html){

    // First we'll check to make sure no errors occurred when making the request
    if(!error){
      var recipes = [];
      var $ = cheerio.load(html);

      $('div.article-block a.picture').each(function(i, elem) {

        console.log(i);
        var deepUrl = $(this).attr('href');

        if(!$(this).attr('href').indexOf("tema") > -1) {
          request(deepUrl, function(error, response, html){

            // First we'll check to make sure no errors occurred when making the request
            if(!error){

              var $ = cheerio.load(html);

              var image = $('div.article div.article-main-pic img').attr('src');
              var title = $('div.recipe h2.fn').text();

              var object = {url: deepUrl, title : title, image : image};

              recipes.push(object);

            }

          });

        }

      });
      callback(recipes);
    }

  });


}

1 个答案:

答案 0 :(得分:0)

  

我想这是因为在执行循环之前正在执行回调。

不,这是因为在你的循环中你有另一个请求

request(deepUrl, function(error, response, html){

和配方填写了此请求的完整回调(匿名函数)。

callback(recipes)放入此完整回调中。