有一个函数首先获取环境中的所有区域,然后对于每个区域,它都会调用API来获取边界点。所有获取操作都会执行,但问题是,在第一个获取的then中,如果我尝试输出区域的长度或执行.foreach操作,我得到的是0。
我知道这是因为它是异步运行的,并且在我执行console.log的时候还没有加载完成,但我认为应该已经加载完成了。这就是为什么我们使用.then,不是吗?等待数据加载完成。
明确一下:我正在寻找一种方法,使zones.length立即返回对象数组的实际长度,并立即计算,而不是返回0。我无法找到解决方法:
以下是代码。
getZones(){
var that = this;
var zones = new Array();
fetch('api/environment/zone/1').then(function(response){
response.json().then(function(data){
data.forEach(function(element){
zones[element.zoneID] = element;
zones[element.zoneID].points = [];
fetch('api/zone/point/'+element.zoneID).then(function(response){
response.json().then(function(data){
data.forEach(function(element){
zones[element.zoneID].points.push(element);
});
}); //closing of data inner fetch.
});
});
});
}).then(function(response){
console.log(zones); //this gives all zones
console.log(zones.length); //this one gives 0
//the for each is never executed because it's still 0.
zones.forEach(function(element){
console.log(element);
});
});
}
非常感谢您快速的反应和帮助,已经做出了很大的贡献。
zones.length
是一个object
,所以为0
。为什么不尝试使用Object.keys(zones).length
而不是zones.length
,看看是否会有输出呢? - Panther