【发布时间】: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