Javascript对象在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

当我试图将usersData对象添加到for循环内的过滤器idToName时,它突然变得未定义。usersData不应该在for循环运行之前获取该值吗?我该怎么修

  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循环运行时,成功回调没有执行。