Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数返回未定义的变量,但函数范围内的变量未定义_Javascript_Node.js_Function_Httprequest_Undefined - Fatal编程技术网

Javascript 函数返回未定义的变量,但函数范围内的变量未定义

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

我这里有一个非常简单的函数,试图从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(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()
返回时,您要返回的值还不可用。因此,请看,您的问题已被标记为重复的,以寻求解决方案。您需要返回一个使用正确值解析的承诺,或者需要接受一个可以使用最终值调用的回调。