将Observable的结果合并为一个最终数组

时间:2018-01-29 16:33:42

标签: javascript angular rxjs

我有一个Observable,我想要map每个项目并使用它来调用带有所述项目的另一个Observable。在此过程中,应订阅第二个Observable并将其结果附加到数组中。在所有这些的最后,我想将此数组设置为我的组件中的一些公共属性。

  • 从服务方法
  • 中检索项目列表
  • 对于列表中的每个项目,使用所述项目
  • 调用另一个服务方法
  • 将结果附加到数组
  • 将数组设置为组件
  • 上的公共属性

我想我可能需要combineLatestforkJoin。有什么想法吗?

上一页,按预期代码工作:

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));

1 个答案:

答案 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));