angular - 使用 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?
解决方案
您可以使用这样的内部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));
推荐阅读
- makefile - Make:在检查依赖项之前运行代码
- node.js - 在 React 上处理服务器端错误:Formik & Yup
- c++ - C ++程序在应该终止时重复
- java - 是否不需要在下面的代码中指定 public 或 public abstract ?
- python - 随机选择总是返回 1 作为答案(简单游戏)
- javascript - HTML 代码在 codepen 中工作,但在其他文本编辑器中不工作
- python - 在 Python 中导入未知模块
- r - 控制 R 中回归不连续性中的固定效应
- .htaccess - 在多个页面上重定向 url 查询字符串
- jpa - 分离实体是什么意思?