从网站Node JS获取JSON

时间:2018-07-13 21:17:42

标签: 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){
      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);

运行此命令时,我得到一个undefined,这从我阅读的内容来看似乎很有意义。但是我不清楚从这里开始该怎么做。我该如何将这个JSON传递给变量?

1 个答案:

答案 0 :(得分:0)

http.get是异步的,并在事件发生时执行事件处理程序。当您调用getter()时,此函数立即返回,即它不等待事件并且执行下一条语句console.log(a)

此外,js是单线程的,并且当前执行堆栈不会因任何其他事件/回调或任何其他事件而中断。因此,事件处理程序只能在当前执行结束时运行,即包含更多语句。因此,您的console.log()将始终在请求的任何事件处理程序之前执行,因此a仍未定义。

如果要在请求完成后继续,则必须从事件处理程序中执行。

有关更多详细信息,请参见此出色的演示文稿https://youtu.be/8aGhZQkoFbQ