【问题标题】:Function returns undefined, but variable not undefined in scope of function [duplicate]函数返回未定义,但变量在函数范围内未定义[重复]
【发布时间】:2019-12-04 00:29:33
【问题描述】:

我在这里有一个非常简单的功能,试图从 r/askreddit 抓取帖子。

const simple_get = require('simple-get');

function get_post() {
  simple_get('https://reddit.com/r/askreddit/random.json', (err, res) => {
    if (err) {
      console.log(err);
    }

    let body = '';

    res.on('data', (chunk) => {
      body += chunk;
    });

    res.on('end', () => {
      var post = JSON.parse(JSON.stringify(eval('(' + body + ')')))
      console.log(post);
      return post;
    });
  });
}

console.log(get_post());

函数返回未定义。但是,当post 在第 17 行(函数内部)输出时,它会返回正确的对象。以下是一些日志:

未定义.....reddit.js:23

Array(2) [对象,对象].....reddit.js:17

除了简单地返回post,我还尝试创建一个全局变量并将其设置为post。那也没用。我需要它作为一个函数,所以我可以在一个 while 循环中设置它来做一些事情,比如如果它是一个 mod 帖子,那么可以得到一个新帖子,所以也可以使用其他替代品。

在 MacOS Mojave 10.14.6 上使用 simple-get 3.1.0 的节点版本 10.15.0。

感谢您的帮助:)

【问题讨论】:

  • 三个问题,因为simple_get() 是异步且非阻塞的。 1)时间到了。 res.on('end', ...) 在您的函数返回后很久才发生。 2) 您实际上没有来自get_post() 的任何返回值。您的return 在回调中,而不是来自get_post()。 3) 当get_post() 返回时,你想要返回的值还不可用。因此,请参阅您的问题已被标记为解决方案的副本。您需要返回一个使用正确值解决的承诺,或者您需要接受可以使用最终值调用的回调。

标签: javascript node.js function httprequest undefined


【解决方案1】:

simple_get 是一个异步函数,这意味着您的代码在实际收到任何响应之前会经过console.log()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2013-06-26
    相关资源
    最近更新 更多