【发布时间】:2020-03-22 02:38:50
【问题描述】:
我目前正在开发一个简单的网络抓取 nodejs 程序。它基于cheerio,我从一个网站获取项目并从那里提取一些信息。
据我了解,我在 foreach 循环中调用的所有函数都是同步的,因此它们应该从上到下执行。而且因为foreach循环也只是一个普通的循环,它在js中执行同步,所以该函数应该返回我完成的数组。但相反,它变得未定义,当我将它直接登录到控制台时它可以工作(?)。
function getIntensiv(){
var intensivregister = [];
request.post({url: 'SOMEURL', form: {SOMEFORM}}, function(err,res,body){
var $ = cheerio.load(body);
$('#dataList').children('tbody').children('tr').each(function(i, elem){
var name = $(elem).children('td').first().text().trim().split("\n")[0].trim();
var zipcity = $(elem).children('td').first().children('small').last().text();
var streetnr = $(elem).children('td').first().children('br').last().prev().text();
intensivregister.push({'name': name, 'zipcity': zipcity, 'streetnr': streetnr});
});
console.log(intensivregister); //works and prints the finished array
return intensivregister; //returns undefined before function finished
});
}
如果你能解释我的错误在哪里并帮助我解决它,我将不胜感激。
【问题讨论】:
-
你从 request.post 回调中返回了一些东西。函数本身不返回任何内容。
标签: javascript node.js asynchronous web-scraping cheerio