所以我正在做几个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。
有人知道为什么吗?
答案 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中没有结果