首页 > 解决方案 > 使用 RXJS 一起返回两个 observables 的结果

问题描述

我想从 URL 中读取参数,然后使用该值调用 observable。如果找到结果,我想继续它并调用另一个 observable。理想情况下,两个电话都已打包,我只需要订阅一次,我就可以将两个结果重新组合在一起。

到目前为止,这是我的实现:

this.route.paramMap.pipe(
  switchMap(params => {
    return forkJoin(
      this.treeService.getTree(params.get('treeName')),
      this.treeService.getTree(params.get('treeName')).pipe(
        mergeMap(tree => this.fruitService.getFruit(tree.id))
      )
    )
  })
).subscribe(res => console.log(res));

这工作得很好,但我必须进行 2 个相同的调用.. 我怎样才能改进它,所以它只调用一次 treeService?

标签: angularrxjs

解决方案


您可以使用这样的内部map

this.route.paramMap.pipe(
  switchMap(params => {
    return this.treeService.getTree(params.get('treeName')).pipe(
      switchMap(tree => this.fruitService.getFruit(tree.id).pipe(
        map(fruit => ([tree, fruit]))
      ))
    )
  })
).subscribe(res => console.log(res));

推荐阅读