2017-06-29 32 views
1

所以我做了几个Ajax调用,最终我想构建一个包含我需要的相关值的对象数组。 Unfortunatley我遇到了一些奇怪的事情。我的第一个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) 

所以数组有我想要的对象,并且数组从数组派生它的原型方法,所以长度应该对它起作用。但console.log(followingObject)给我0.

任何人都知道为什么?

+0

@ Jonasw-没有,现在。 ;-) – RobG

回答

1

我感动的console.log到完成功能

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); 
     }) 
    }; 
} 

的执行console.log是SYNCHRONUS而Ajax调用被执行asynchronus,这意味着Ajax调用命令后Ajax调用结束前得到执行 - >在console.log中没有结果