Javascript Node.js-异步JSON查询

Javascript Node.js-异步JSON查询,javascript,json,node.js,asynchronous,Javascript,Json,Node.js,Asynchronous,如果这是一个愚蠢的问题,我深表歉意,但我对Javascript和Node.js还不熟悉,因为它是异步的 我的目标是从API查询JSON对象并能够使用它。我试图寻找关于我应该做什么的问题和答案,但没有一个对我来说真正有意义,所以我希望通过看到正确的代码来学习 var request = require('request'); var url = 'url here'; var temp; var done = false; request(url, function (error, respo

如果这是一个愚蠢的问题,我深表歉意,但我对Javascript和Node.js还不熟悉,因为它是异步的

我的目标是从API查询JSON对象并能够使用它。我试图寻找关于我应该做什么的问题和答案,但没有一个对我来说真正有意义,所以我希望通过看到正确的代码来学习

var request = require('request');

var url = 'url here';
var temp;
var done = false;

request(url, function (error, response, body) {
    if (!error) {
      temp = body;
      done = true;
      console.log(temp);
    } else {
        console.log(error);
    }
});

if (done){
  console.log(temp);
}


有人能给我介绍一下重构代码的正确方法吗?

您正在使用该行创建的函数

request(url, function (error, response, body) {
在收到响应之前不会执行。代码的其余部分将继续运行。想象一下这样的流程:

var request = require('request');

var url = 'url here';
var temp;
var done = false;

request(url, XXX);

if (done){
  console.log(temp);
然后,当接收到响应时(可能是很久以后),执行函数
XXX

正如您所看到的,
done
当行

if (done){

执行。

我看到,当我在终端中运行它时,它会暂停,并最终给我一个错误。如何解决此问题?如果要对响应执行任何操作,必须在函数
XXX
中执行。这会使您的
done
变量冗余。在该函数
XXX
中,我建议您使用
调试器在顶部,并在控制台中播放。特别是,检查
错误
响应
主体
对象,以熟悉它们所包含的内容。是否有方法保存对对象的响应并在事后处理对象?尽量不要这样想。。。“aftern”在该函数中。试着在Javascript和异步函数编程上观看一些youtube视频片段-它真的很漂亮。请参阅:。特别是答案底部的部分。这个问题的变体每天被问很多次。这个问题的根源在于您需要真正理解什么是异步响应以及如何使用它。首先要了解的是,异步回调在一段时间后被调用,但是函数之后的代码行在异步响应运行之前立即运行。因此,您只能在回调内部使用异步响应。将需要使用响应的所有代码放入回调中。