我一直在努力从我的http请求序列中获得正确的效果。我必须做一个返回一个网站对象数组的初始请求。然后,我必须使用站点对象中找到的两个id再创建两个http请求,以获取关联的站点组织名称和团队名称,并将它们添加到每个站点对象。所以,我的步骤是:网站更好的实现可观察序列的方法
- 获取列表
- 使用现场组织ID来获得相关的组织,并添加名字到站点对象。
- 使用网站团队ID获取相关团队并将团队名称添加到网站对象。
我的代码如下:
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;
}
);
}
在我的HTML我绑定数据:
<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>
问题是微调器完成所有步骤之前被删除每个清单项目都按照完成的顺序弹出。我知道这是为什么发生。我只是无法弄清楚如何链接可观察的流来完成一切,然后才能移除微调器并显示数据。
任何协助将是伟大的。谢谢。
谢谢。这工作非常好,我从你的解决方案中学到了很多东西。其实从双方都学到了。 :) – Aaron
太棒了,感谢您的反馈。学习是最好的感觉:)很高兴我可以帮助 – atomrc