【问题标题】:Chain observables but listen to second observable changes链 observables 但监听第二个 observable 变化
【发布时间】:2023-03-25 02:40:01
【问题描述】:

我正在管道两个 observables

this.obs1$
  .pipe(
    skip(1),
    mergeMap(schedules => {
      this.schedules=schedules
      for (let elm in schedules) {
        ....
      }
      return this.selectedDate$;
    })
  )
  .subscribe(selectedDate => {
   ....

问题是如果Obs1$ 未被触发,订阅不会发送数据。

即使Obs1$ 没有改变,但selectedDate$ 应该始终在Obs1$ 之后运行,我想获得selectedDate$ 的值

【问题讨论】:

  • 所以你想独立地监听两个可观察对象,但还要使用第一个可观察对象来触发对第二个可观察对象的调用?
  • 你想要做什么还不清楚。你能具体说明一些你希望它如何工作的例子吗?
  • Obs1$ 只发出一个值,但第二个 obs 发出许多值。我每次使用Obs1$emits 订阅的唯一一个值selectedDate$emits value

标签: javascript angular rxjs reactive-programming


【解决方案1】:

您可以使用combineLatest

combineLatest([
    this.obs1$,
    this.selectedDate$
]).subscribe(([obs1Value, selectedDate]) => {...})

现在每次更改obs1$selectedDate$都会触发订阅。

但请记住,这只有在两个可观察对象都发出至少一个值时才有效。如果你想确保订阅被触发,即使你不确定this.obs1$ 是否会被触发,你可以用startWith 管道链接它,这将确保发出一个值。

this.obs1$.pipe(startWith('defaultValue'))

【讨论】:

  • 我已经评论了我的问题以更好地澄清我的问题
  • 好的,那么你不需要startWith,只需使用combineLatest就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
相关资源
最近更新 更多