我写了这个函数,当我运行它时,它返回{}。当我在传递给$(' .price')。过滤器的函数中记录json时,它显示json对象已使用正确的数据进行更新。但是,在我的函数结束时,它返回一个空对象。我不明白发生了什么。非常感谢帮助。谢谢!
var request = require('request');
var cheerio = require('cheerio');
module.exports = function scraper(url) {
var json = {};
request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('.price').filter(function () {
var data = $(this);
json.price = data.text();
console.log(json);
});
}
});
return json
};
答案 0 :(得分:2)
return json
在您传递给请求的函数(回调)之前发生。执行顺序如下:
json
(仍为空),请求尚未完成。您可以通过在响应函数中放置响应所需的内容或学习promises来修复它。后者更清洁,与节点配合得很好。
答案 1 :(得分:0)
请求是异步的,所以返回json 将返回一个空对象,你可以把它放在请求回调中:
request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
$('.price').filter(function () {
var data = $(this);
json.price = data.text();
console.log(json);
return json;
});
}
});