Javascript 当我执行循环时,AngularJs/Ajax索引正在更改

Javascript 当我执行循环时,AngularJs/Ajax索引正在更改,javascript,ajax,angularjs,loops,Javascript,Ajax,Angularjs,Loops,我有一个由2个ajax请求创建的数组 var myId = 13; var array = []; var checkIFfollowing = function(id, username){ UserService.checkIfFollowing(id, myId) .success(function (data) { var post = { is_following : data, //boolean username : use

我有一个由2个ajax请求创建的数组

var myId = 13;

var array = [];

var checkIFfollowing = function(id, username){

UserService.checkIfFollowing(id, myId)
  .success(function (data) {        
    var post = {
      is_following : data, //boolean
      username : username
    }

   array.push(post);
          }).
        error(function(error) {
        //error
      });
}

UserService.GetUserById(user_id)
  .success(function (data) { 
     angular.forEach(data, function(post){    
     checkIfFollowing(post.id, post.username)
           })
          }).
        error(function(error) {
        //error
      });
数据结构始终按如下方式返回:

[{id:1, username:'ed'},{id:2, username:'joe'},{id:3, username:'bob'}]

但在循环之后,索引会发生变化,但很多时候,它们都是相同的索引。是否有办法使第二个UserService始终保持一致。CheckIfFollow()异步返回结果,以便填充数组的顺序将发生更改。一种有效的方法是维护一个索引,并在处理完所有项后按索引对数组进行排序。示例代码如下:

var myId = 13;
var array = [];
var dataLength;

var checkIFfollowing = function (index, id, username) {
    UserService.checkIfFollowing(id, myId)
      .success(function (data) {
          var post = {
              is_following: data, //boolean
              username: username,
              index: index
          }

          array.push(post);
          if (dataLength - 1 === index) {
              array.sort(function (a, b) { return a.index - b.index })
          }
      }).error(function (error) {
          //error
      });
}

UserService.GetUserById(user_id)
  .success(function (data) {
      dataLength = data.length;
      data.forEach(function (post, index) {
          checkIfFollowing(index, post.id, post.username)
      })
  }).error(function (error) {
      //error
  });

第二个UserService.checkIffollowing()异步返回结果,因此填充数组的顺序将发生更改。一种有效的方法是维护一个索引,并在处理完所有项后按索引对数组进行排序。示例代码如下:

var myId = 13;
var array = [];
var dataLength;

var checkIFfollowing = function (index, id, username) {
    UserService.checkIfFollowing(id, myId)
      .success(function (data) {
          var post = {
              is_following: data, //boolean
              username: username,
              index: index
          }

          array.push(post);
          if (dataLength - 1 === index) {
              array.sort(function (a, b) { return a.index - b.index })
          }
      }).error(function (error) {
          //error
      });
}

UserService.GetUserById(user_id)
  .success(function (data) {
      dataLength = data.length;
      data.forEach(function (post, index) {
          checkIfFollowing(index, post.id, post.username)
      })
  }).error(function (error) {
      //error
  });