Ich habe gekämpft, um den richtigen Effekt von meiner Sequenz von HTTP-Anfragen zu bekommen. Ich muss eine erste Anfrage machen, die ein Array von Site-Objekten zurückgibt. Dann muss ich zwei weitere HTTP-Anfragen mit zwei IDs machen, die im Site-Objekt gefunden wurden, um den Namen der assoziierten Sites und den Team-Namen zu erhalten und sie zu jedem Site-Objekt hinzuzufügen. Also meine Schritte sind:Bessere Möglichkeit, beobachtbare Sequenz zu implementieren
- Get Liste von Websites
- Nutzung Baustellenorganisation id ähnliche Organisation zu erhalten und den Namen auf die Website-Objekt hinzufügen.
- Verwenden Sie die Site-Team-ID, um das zugehörige Team abzurufen und den Team-Namen zum Site-Objekt hinzuzufügen.
Mein Code ist wie folgt:
private getSites() {
this.spinner.show();
this.sitesService.getSitesByUserId(this.userId)
.subscribe(
_data => {
_data.map(site => {
this.orgService.getOrganization(site['OrganizationId'])
.map(org => {
site['orgName'] = org['org']['name'];
return org;
})
.flatMap(() => this.teamsService.getTeam(site['TeamId']))
.map(team => {
site['teamName'] = team['team']['name'];
return team;
})
.subscribe(
_d => {
this.sites.push(site);
}
);
});
},
_error => {},
() => {
this.spinner.hide();
this.loading = false;
}
);
}
In meinem html ich die Daten am Bindung:
<div *ngFor="let site of (sites | filterlist: value : 'name')">
<card-directory-item (click)="siteSelected(site)">
<i class="material-icons item-icon">location_city</i>
<h2 class="item-name">{{ site.name }}</h2>
<div class="item-field-1">{{ site.city }} {{ site.state }} </div>
<div class="item-static-field flex-column">
<div>{{ site.teamName }}</div>
<div>{{ site.orgName }}</div>
</div>
</card-directory-item>
</div>
Das Problem ist der Spinner entfernt wird, bevor alle Schritte abgeschlossen sind und Jedes Listenelement erscheint in der Reihenfolge, in der es fertig ist. Ich weiß, warum das passiert. Ich war einfach nicht in der Lage herauszufinden, wie man den beobachtbaren Stream verkettet, um alles zu beenden, bevor der Spinner entfernt und Daten angezeigt werden.
Jede Hilfe wäre großartig. Vielen Dank.
Vielen Dank. Das hat sehr gut funktioniert und ich habe viel von deiner Lösung gelernt. Eigentlich von beiden gelernt. :) – Aaron
Super, danke für dein Feedback. Lernen ist das beste Gefühl aller Zeiten :) Ich bin froh, dass ich helfen konnte – atomrc