我试图返回食谱数组,但它似乎是空的。我猜这是因为回调正在执行循环之前执行。在这种情况下,我如何使用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 :(得分:0)
我想这是因为在执行循环之前正在执行回调。
不,这是因为在你的循环中你有另一个请求
request(deepUrl, function(error, response, html){
和配方填写了此请求的完整回调(匿名函数)。
将callback(recipes)
放入此完整回调中。