Node.js 从网站节点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){

因此,我对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){
      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中执行


有关更多详细信息,请参见本精彩演示文稿

只需移动您的
控制台。将
记录在最后的回答中,您应该会显示您的结果检查此问题的可能重复项: