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 发生在您传递给请求的函数(回调)之前。执行顺序是这样的:

  1. 发出请求。
  2. 当请求返回响应时,执行我给你的这个函数(第 4 行)
  3. Return json(还是空的),请求还没有完成。
  4. 请求已完成,因此它会执行您在第 4 行中为它提供的函数以及响应。

您可以通过将您需要对响应执行的操作放入该函数中,或者学习如何做来修复它 promises。后者更简洁,并且与 node 配合得很好。