2017-06-29 63 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中沒有結果