2016-09-15 8 views
0

レシピ配列を返そうとしていますが、空であるようです。ループが実行される前にコールバックが実行されているからです。私は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); 
    } 

    }); 


} 
+0

私はすでにあなたに答えています。しかし、2番目の要求の中で2番目のif(!error){}の後にコールバックを置くと良いでしょう。 –

+0

はい、あなたが好きで、そこにコールバックを入れると、 'res.jsonそれ。 –

+0

このコードをフロントエンドで使用していますか?私はそれを以前気づかなかったので、私は考えてみましょう。 –

答えて

0

私は、ループが実行されている前に、コールバックが実行されているので、それがあると思います。あなたのループの中で、あなたが他の要求

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

とレシピは、この要求の完全なコールバック(匿名関数)で満たされている必要があるため

Nopに、それはです。

callback(recipes)をこの完全なコールバックに入れます。

+0

コールバックはループのために何度も実行されますか?理想的ではありません。 –

関連する問題