Angular 2 - 代理两个BehaviorSubject / Observables

时间:2016-09-23 18:55:43

标签: angular rxjs

假设我有一个需要两个observable来呈现其内容的组件:

this.manifest.subscribe((a) => {
    f(a, b) 
})

this.route.params.subscribe((b) => {
    f(a, b)
})

一旦f()到达时调用a的正确Angular / rxjs方式是什么,和/或在b(例如,路由参数更新)到达后再次调用它。

显然,我可以手动跟踪ab,但这看起来很丑陋而且不优雅。有更多的Angularian方式吗?

2 个答案:

答案 0 :(得分:3)

您可以使用combineLatest合并两个流,并在每次触发其中一个时触发。

Rx.Observable.combineLatest(this.manifest, this.route.params, (a, b) => f(a, b))
  .subscribe(c => /*Do something with the result of f(a,b)*/

请注意,上述内容仅在每个来源至少有一个值时触发,但如果您的来源为BehaviorSubjects

,我认为这不应该是一个问题

答案 1 :(得分:0)

如果您需要两个可观察对象一个接一个地解决,您可能需要考虑Observable.concat(obs1, obs2)

订阅连接的observable时,obs1将首先订阅,然后obs2订阅。