Javascript 函数未返回更新的对象
Javascript function not returning updated object
我写了这个函数,当我 运行 它时,它 returns {}。当我在传递给 $('.price').filter 的函数中记录 json 时,它显示 json 对象已更新为正确的数据。但是,在我的函数结束时,它 returns 是一个空对象。我不明白发生了什么。帮助将不胜感激。谢谢!
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
};
请求是异步的,所以returnjson会return一个空对象,可以放在请求回调中:
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;
});
}
});
return json
发生在您传递给请求的函数(回调)之前。执行顺序是这样的:
- 发出请求。
- 当请求返回响应时,执行我给你的这个函数(第 4 行)
- Return
json
(还是空的),请求还没有完成。
- 请求已完成,因此它会执行您在第 4 行中为它提供的函数以及响应。
您可以通过将您需要对响应执行的操作放入该函数中,或者学习如何做来修复它 promises。后者更简洁,并且与 node 配合得很好。
我写了这个函数,当我 运行 它时,它 returns {}。当我在传递给 $('.price').filter 的函数中记录 json 时,它显示 json 对象已更新为正确的数据。但是,在我的函数结束时,它 returns 是一个空对象。我不明白发生了什么。帮助将不胜感激。谢谢!
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
};
请求是异步的,所以returnjson会return一个空对象,可以放在请求回调中:
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;
});
}
});
return json
发生在您传递给请求的函数(回调)之前。执行顺序是这样的:
- 发出请求。
- 当请求返回响应时,执行我给你的这个函数(第 4 行)
- Return
json
(还是空的),请求还没有完成。 - 请求已完成,因此它会执行您在第 4 行中为它提供的函数以及响应。
您可以通过将您需要对响应执行的操作放入该函数中,或者学习如何做来修复它 promises。后者更简洁,并且与 node 配合得很好。