我有一个Observable,我想要map
每个项目并使用它来调用带有所述项目的另一个Observable。在此过程中,应订阅第二个Observable并将其结果附加到数组中。在所有这些的最后,我想将此数组设置为我的组件中的一些公共属性。
我想我可能需要combineLatest
或forkJoin
。有什么想法吗?
上一页,按预期代码工作:
this.myService.getForests().subscribe(forests => {
forests.forEach(forest => {
const name: string = forest.forestName;
const provider: string = forest.provider;
this.myService.getDomains(provider, forestName).subscribe(domains => {
this._domains.push.apply(this._domains, domains);
});
});
});
我一直试图重构并且没有产生预期结果的代码:
this.myService.getForests()
.combineLatest(forests => forests.map(forest => this.myService.getDomains(forest.provider, forest.forestName)))
.subscribe(domains => this._domains.push.apply(this._domains, domains));
答案 0 :(得分:0)
这里可能的解决方案之一是将您的森林映射到observables并将flatMap getForests()
映射到映射的observables中的forkJoin
observable:
this.myService.getForests().flatMap(forests =>
Observable.forkJoin(forests.map(forest =>
this.myService.getDomains(forest.provider, forest.forestName)))
.subscribe(domains => this._domains.push.apply(this._domains, domains));