JSON 变量 returns 未定义

JSON variable returns Undefined

抱歉给您带来不便,我是 Node.js 的新手。我正在尝试将 json 存储在“usersData”变量中,因此我想稍后在其他函数中使用它。问题是,如果我在“if”中用 console.log 测试变量,结果是 returns,但是当试图在请求子函数之外显示变量时,结果是 'undefined' .我已经声明了全局 usersData 变量,如下所示。谢谢。

var usersData;

function getAllUsers(){
  request({url, json: true}, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      usersData = body
      //console.log(usersData)  //Here returns a value
    }
  });
  console.log(usersData)  //here returns undefined
}

request 是异步方法,所以如果你想稍后在另一个函数中使用它的结果,应该在第二个参数回调中处理它。即

var usersData;

var handleUserData = function() {};

function getAllUsers(){
  request({url, json: true}, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      usersData = body
      //console.log(usersData)  //Here returns a value

      // use results in another function
      handleUserData(body);
    }
  });
}

或使用Promise

function getAllUsers() {
  return new Promise(function(resolve, reject) {

    request({url, json: true}, function (error, response, body) {
      if (!error && response.statusCode == 200) {
        usersData = body
        //console.log(usersData)  //Here returns a value
        resolve(body);
      } else {
        reject(error);
      }
    });

  });
}

// handle `usersData`
getAllUsers().then(body => {
  handleUserData(body);
});

这里有一些你需要知道的东西, request 是一个异步函数,这意味着它 运行 在后台运行而不阻塞主线程,所以回调函数在请求完成后执行,这就是为什么 body 的值被分配给 userData 并且在打印时给出一些价值。

但是当在回调函数之外打印时,它给出未定义,因为 request 异步需要时间才能完成,运行 在后台。因此,在正文分配给 userData 之前的安慰语句 运行s 等打印时给出未定义。