完整的对象数组没有长度

时间:2017-06-29 10:56:14

标签: javascript arrays ajax object

所以我正在做几个ajax调用,我最终想要构建一个包含我需要的相关值的对象数组。不幸的是,我遇到了一些奇怪的事情。我的第一个ajax调用返回一个充满了我正在寻找的对象的数组,但是当我在数组上调用length时,我得到零。这是相关代码(代码'以下'是用户拥有的以下数组):

function followingsJSON(followings) {
  var followingObject = [];

  for (var i in followings) {
    var query = "https://wind-bow.glitch.me/twitch-api/users/" + 
followings[i];

    $.ajax({

      url: query,
      type: "GET",
      datatype: "json"

    }) .done(function(json){
      if (json.display_name) {
        followingObject.push({
          'display_name' : json.display_name,
          'logo' : json.logo,
          '_id' : json._id
        });
      } else {
        followingObject.push({
          'display_name' : null
        });
      }
    })
  };
  console.log(followingObject);
  console.log(followingObject.length);
  }

使用chrom dev工具我可以从控制台日志中看到followObject是:

[]
0: Object
1: Object
2: Object
3: Object
4: Object
5: Object
6: Object
7: Object
8: Object
length: 9
__proto__: Array(0)

因此数组具有我想要的对象,并且数组从Array派生其原型方法,因此长度应该适用于它。但是console.log(followObject)给了我0。

有人知道为什么吗?

1 个答案:

答案 0 :(得分:1)

我将console.log移动到了done函数

function followingsJSON(followings) {
    var followingObject = [];

    for (var i in followings) {
        var query = "https://wind-bow.glitch.me/twitch-api/users/" +
            followings[i];

        $.ajax({

            url: query,
            type: "GET",
            datatype: "json"

        }) .done(function(json){
            if (json.display_name) {
                followingObject.push({
                    'display_name' : json.display_name,
                    'logo' : json.logo,
                    '_id' : json._id
                });
            } else {
                followingObject.push({
                    'display_name' : null
                });
            }
            console.log(followingObject);
            console.log(followingObject.length);
        })
    };
}

当ajax调用执行异步时,console.log是同步的,这意味着在ajax调用完成之前执行ajax调用之后的命令 - >在console.log中没有结果