我正在尝试将一些来自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;
}
我该如何解决这个问题?
答案 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()当前代码的每一步,它将如下所示:
获取用户数据。
空用户创建
请求
空用户返回
来自请求的回复