因此,我对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传递给变量?
答案 0 :(得分:0)
http.get
是异步的,并在事件发生时执行事件处理程序。当您调用getter()
时,此函数立即返回,即它不等待事件并且执行下一条语句console.log(a)
。
此外,js是单线程的,并且当前执行堆栈不会因任何其他事件/回调或任何其他事件而中断。因此,事件处理程序只能在当前执行结束时运行,即包含更多语句。因此,您的console.log()
将始终在请求的任何事件处理程序之前执行,因此a
仍未定义。
如果要在请求完成后继续,则必须从事件处理程序中执行。
有关更多详细信息,请参见此出色的演示文稿https://youtu.be/8aGhZQkoFbQ