【问题标题】:Getting a JSON from a website Node JS从网站 Node JS 获取 JSON
【发布时间】:2018-07-13 21:17:41
【问题描述】:

所以我对 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);

当我运行它时,我得到一个 as undefined,从我所读的内容来看,这似乎是有道理的。但我不清楚从这里做什么。我将如何将此 JSON 传递给变量?

【问题讨论】:

标签: node.js asynchronous https


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多