Javascript 函数返回未定义的变量,但函数范围内的变量未定义
我这里有一个非常简单的函数,试图从r/askreddit那里获取帖子Javascript 函数返回未定义的变量,但函数范围内的变量未定义,javascript,node.js,function,httprequest,undefined,Javascript,Node.js,Function,Httprequest,Undefined,我这里有一个非常简单的函数,试图从r/askreddit那里获取帖子 const simple_get=require('simple-get'); 函数get_post(){ 简单的https://reddit.com/r/askreddit/random.json“,(错误,结果)=>{ 如果(错误){ 控制台日志(err); } 让body=''; res.on('数据',(块)=>{ body+=块; }); res.on('结束',()=>{ var post=JSON.parse(J
const simple_get=require('simple-get');
函数get_post(){
简单的https://reddit.com/r/askreddit/random.json“,(错误,结果)=>{
如果(错误){
控制台日志(err);
}
让body='';
res.on('数据',(块)=>{
body+=块;
});
res.on('结束',()=>{
var post=JSON.parse(JSON.stringify(eval(“(“+body+”)))))
控制台日志(post);
回程站;
});
});
}
log(get_post());
函数返回undefined。但是,当在第17行(函数内部)输出post
时,它返回正确的对象。以下是一些日志:
未定义..reddit.js:23
数组(2)[对象,对象]……reddit.js:17
除了简单地返回post
,我还尝试创建一个全局变量并将其设置为post
。那也没用。我需要它作为一个函数,这样我就可以在一个while循环中设置它来做一些事情,比如如果它是一个mod post,就可以获得一个新的post,所以也可以使用其他方法
节点版本10.15.0,在MacOS Mojave 10.14.6上具有简单的get 3.1.0
感谢您的帮助:)
simple\u-get
是一个异步函数,它意味着您的代码在实际收到任何响应之前要经过console.log()
,这有三个问题,因为simple\u-get()
是异步和非阻塞的。1) 这是时机res.on('end',…)
发生在函数返回后很久。2) 实际上,get\u post()
中没有任何返回值。您的返回值
位于回调中,而不是来自get\u post()
。3) 当get\u post()
返回时,您要返回的值还不可用。因此,请看,您的问题已被标记为重复的,以寻求解决方案。您需要返回一个使用正确值解析的承诺,或者需要接受一个可以使用最终值调用的回调。