我必须编写一个显示多个数据的树组件,这对我来说可以很好地处理模拟数据。这里的问题是当我尝试从服务器获取数据时,让我解释一下:
我有三个主要对象:区域、建筑物和门。正如您可能猜到的,doors 指的是 buildingId,而 buildingID 指的是地区。因此,要检索数据并创建我的树节点,我必须在非异步的 forEach 循环中执行一些 http 调用。
我不会与您分享所有内容,只会分享一个最小化的问题,以便我可以轻松获得帮助:
此方法从服务器检索区域数组并将其放入本地数组中:
async getDistricts(){
this.districtDataService.getDistrictData().toPromise().then(async districts => {
this.districts = await districts.results as District[];
});
}
在我的 ngOnInit 上:
ngOnInit() {
this.getDistricts().then(async () => {
console.log(this.districts);
for (const district of this.districts){
console.log(district);
}
})
第一个 console.log(在 NgOnInit 中)返回一个空数组,这很令人惊讶,因为第一个方法将数据放在“this.districts”中。并在我将其放入后立即在第一种方法中记录数据返回一个包含我的数据的数组。我想这与我使用的异步/等待有关。谁能帮忙?
编辑 1:尝试使用 this.getDistricts().finally() 而不是 this.getDistricts().then(),但没有用。
编辑 2:getDistrict 中的 console.log 在我的循环之前执行。预期的行为恰恰相反。
已解决:在我的 HTTP 调用解决此问题后,将 for 循环放入 finally 块中。所以正如答案所说,我认为我过度设计了异步/等待调用。基于此,我不得不重新思考我的工作。谢谢大家!
慕莱坞森
慕村225694
拉莫斯之舞
随时随地看视频慕课网APP
相关分类