JSON变量返回未定义

时间:2020-08-09 04:09:41

标签: node.js json variables return undefined

很抱歉给您带来不便,我是Node的新手。我试图将json存储在“ usersData”变量中,因此我想稍后在其他函数中使用它。问题是,如果我使用console.log在“ if”中测试变量,它将返回给我结果,但是当尝试在request子函数之外显示变量时,结果为“ 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
}

2 个答案:

答案 0 :(得分:0)

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);
});

答案 1 :(得分:0)

以下是您需要了解的一些内容, request是一个异步函数,这意味着它在后台运行而不会阻塞主线程,因此回调函数在请求完成后执行,这就是为什么body的值分配给userData并在打印时给出一些值的原因。

但是在回调函数之外进行打印时,由于request被异步处理,因此它给出了undefined,它需要时间来完成在后台运行。因此,安慰声明在将正文分配给userData之前运行,因此在打印时给出未定义的内容。