Javascript对象在for循环中变得未定义
当我试图将usersData对象添加到for循环内的过滤器idToName时,它突然变得未定义。usersData不应该在for循环运行之前获取该值吗?我该怎么修Javascript对象在for循环中变得未定义,javascript,Javascript,当我试图将usersData对象添加到for循环内的过滤器idToName时,它突然变得未定义。usersData不应该在for循环运行之前获取该值吗?我该怎么修 Project.getProjects() .success(function(data) { vm.projects = data; var projectLength = vm.projects.length; // Get usersData User.allUsers() .s
Project.getProjects()
.success(function(data) {
vm.projects = data;
var projectLength = vm.projects.length;
// Get usersData
User.allUsers()
.success(function(data) {
usersData = data;
console.log(usersData); // It prints the object
})
for (var i = 0; i < projectLength; i++){
console.log(usersData); // It prints undefined
vm.projects[i].assigneeID = $filter('idToName')(vm.projects[i].assigneeID, usersData);
}
})
Project.getProjects()
.成功(功能(数据){
vm.projects=数据;
var projectLength=vm.projects.length;
//获取用户数据
User.allUsers()
.成功(功能(数据){
usersData=数据;
console.log(usersData);//它打印对象
})
对于(变量i=0;i
这一定是由于异步调用造成的。尝试将代码更新为以下内容
// Get usersData
User.allUsers()
.success(function(data) {
usersData = data;
console.log(usersData); // It prints the object
for (var i = 0; i < projectLength; i++){
console.log(usersData); // It prints undefined
vm.projects[i].assigneeID = $filter('idToName')(vm.projects[i].assigneeID, usersData);
}
})
//获取用户数据
User.allUsers()
.成功(功能(数据){
usersData=数据;
console.log(usersData);//它打印对象
对于(变量i=0;i
将for
循环移动到用户的回调内部。allUsers
调用。在返回对象之前,您正在使用usersData
“使用对象”对于变量范围问题来说是一个非常不准确和令人困惑的说法。与其说是范围问题,不如说是一个(确定性)竞争条件。据我们所知,usersData
的作用域是全局的。for循环运行时,成功回调没有执行。