【发布时间】:2018-12-24 09:51:15
【问题描述】:
我使用的是 Angular 6,我的数据库是 Firebase。现在我尝试根据其建筑显示每个房间的名称。例如:
Building A
Room 1
Room 2
Building B
Room 1
Room 2
但每次我尝试时,它都会先显示所有建筑物的名称,然后才会显示房间的名称。这是我现在得到的:
Building A
Building B
Room 1
Room 2
我发现这是因为 forEach 不断跳过 subscribe 函数。
我曾尝试使用promise 和await,但它不起作用。也许是因为我以错误的方式使用它?我不太确定如何正确使用promise。
async loadData(){
this.navigationService.user
.subscribe( user => {
console.log(user);
this.user = user;
this.navigationService.getBuildings(this.user.orgId)
.subscribe( building => {
this.navMasterBuilding = [];
this.buildings = building;
this.buildings.forEach( async building2 => {
this.completeBuildingId = building2.completeBuildingId;
this.buildingName = building2.buildingName;
console.log(building2.buildingName);
await new Promise ((resolve, reject) => {
this.navigationService.getLocation(this.user.orgId, this.completeBuildingId)
.subscribe(location => {
console.log('room' + location);
this.navMasterLocation = [];
});
resolve();
});
});
});
});
}
我尝试使用 setTimeout 来延迟它,但它仍然不起作用。
【问题讨论】:
-
请将您的代码添加到问题中,而不仅仅是您的代码照片。
-
在内订阅下试过
resolve();? -
内订阅下我试过
resolve();,还是不行。感谢您的建议。
标签: angular asynchronous promise async-await subscribe