Node.js得到请求问题(异步问题?)

时间:2016-11-17 20:56:15

标签: javascript node.js http asynchronous

我正在尝试将一些来自http请求的数据存储到字典中,但是当我返回字典时,它总是为空的

function getUserData(id){
	var user = {}

	request('http://apis.scottylabs.org/directory/v1/andrewID/' + id, function (error, response, body) {
	  if (!error && response.statusCode == 200) {
	  	  data = JSON.parse(body);
		  user.name = data.first_name + " " + data.last_name;
		  if (Array.isArray(data.department)){
		    user.dept = data.department[0];
		  } else {
		    user.dept = data.department;
		  }
		  user.level = data.student_level;
		  user.class = data.student_class;
          // if i print user here it is correct
	  }
	})
    // this is just returning {}
	return user;
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题是您的代码是异步的,并且不等待API响应返回“用户”。

使用回调函数在响应回来时返回用户。

这样的事情:

function getUserData (id, callback) { 
    var user = {};
    request(url, function (error, response, body) {
      if (!error && response.statusCode == 200) {

          // if i print user here it is correct
          callback(user);
      }
    })
} 

电话会是这样的:

getUserData(123, function (user) {
    // do something with the user data
})

如果您使用console.log()当前代码的每一步,它将如下所示:

获取用户数据。

空用户创建

请求

空用户返回

来自请求的回复