有一個函數首先獲取環境中的所有區域,然後當他爲每個區域找到這些區域時,它將爲邊界點執行api調用。 所有取得到執行,但問題是,在然後的第一次提取,如果我嘗試寫出來的區域的長度或嘗試做一個.foreach我得到0react ajax:多重嵌套抓取獲取
我知道這是因爲它運行異步並且它在我執行console.log的那一刻還沒有加載,但是我應該這樣做。這就是爲什麼我們使用,那麼不是嗎?等待數據加載完畢。
要明確:我正在尋找一種方法,使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'是'0',因爲它是一個我相信的'對象'。你爲什麼不嘗試'Object.keys(zones).length'而不是'zones.length'並且看看你是否有輸出? – Panther
@Panther我不能這樣做,因爲當日志被執行時,區域還沒有加載。我會得到一個「無法讀取未定義的屬性」,這是完整的問題。 我第一次接受* .then *會確保一切都會被加載,但我真的不知道我做錯了什麼。 – Roel