Node.js 从网站节点JS获取JSON
因此,我对node js相当陌生,在异步编程方面遇到了困难。我正在尝试从网站获取JSON,并将其传递给一个变量供以后使用,以测试我一直在使用的代码:Node.js 从网站节点JS获取JSON,node.js,asynchronous,https,Node.js,Asynchronous,Https,因此,我对node js相当陌生,在异步编程方面遇到了困难。我正在尝试从网站获取JSON,并将其传递给一个变量供以后使用,以测试我一直在使用的代码: var https = require("https"); var a; function getter(url){ var request = https.get(url, function(response){ var body = ""; response.on("data", function(chunk){
var https = require("https");
var a;
function getter(url){
var request = https.get(url, function(response){
var body = "";
response.on("data", function(chunk){
body += chunk;
});
response.on("end", function(){
if(response.statusCode === 200){
try{
a = JSON.parse(body);
}catch(err){
console.log(err);
}
}
})
})
};
getter('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY');
console.log(a);
当我运行这个程序时,我得到一个未定义的a,从我所读的内容来看,这似乎是有意义的。但我不清楚接下来该怎么办。如何将此JSON传递到变量中?
http.get
是异步的,在事件发生时执行事件处理程序。调用getter()
时,此函数立即返回,即它不等待事件,并执行下一条语句console.log(a)
此外,js是单线程的,并且当前的执行堆栈不会因任何其他事件/回调或其他原因而中断。因此,事件处理程序只能在当前执行结束时运行,即包含noch more语句。因此,您的console.log()
总是在请求的任何eventhandler之前执行,因此a
仍然是未定义的
如果希望在请求完成后继续,则必须从eventhandler中执行
有关更多详细信息,请参见本精彩演示文稿只需移动您的
控制台。将记录在最后的回答中,您应该会显示您的结果检查此问题的可能重复项: