【问题标题】:Array full of Objects has no Length [duplicate]充满对象的数组没有长度[重复]
【发布时间】:2017-06-29 10:56:14
【问题描述】:

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

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 开发工具,我可以从控制台日志中看到 followingObject 是:

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

所以数组有我想要的对象,并且数组从 Array 派生它的原型方法,所以 length 应该适用于它。但是 console.log(followingObject) 给了我 0。

有人知道为什么吗?

【问题讨论】:

  • @Jonasw——现在什么都没有。 ;-)

标签: javascript arrays ajax object


【解决方案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 中还没有结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2020-01-26
    • 2023-03-11
    • 2011-03-15
    相关资源
    最近更新 更多