【问题标题】:RxJava: Combine hot and cold observableRxJava:结合冷热可观察
【发布时间】:2015-11-11 12:55:44
【问题描述】:

我有两个 Observable。它们都是Observable<T> 类型。

一个是冷的,称为initialValueObservable,它只是从Observable.from() 的项目列表中发出。

另一个是热的,称为valueUpdateObservable,它是PublishSubject,当有新项目时通知订阅者。

在客户端中,我想订阅两者,因此我从initialValueObservable 和valueUpdateObservable 发布的更新中获取初始值。 我最初的方法是合并它们,但我认为这不起作用,因为initialValueObservable 将发送onComplete,此时valueUpdateObservable 发出的新项目将不会到达。

【问题讨论】:

  • 当你进行合并时,onComplete 仅在所有源 observables(在这种情况下,两者都完成)时才会发送。

标签: reactive-programming rx-java


【解决方案1】:

当您进行合并时,onComplete 仅在所有源 observables(在本例中为两者)都完成时发送。

以这段(c# Rx.NET)代码为例:

Observable
    .Return(42L)
    .Merge(Observable.Interval(TimeSpan.FromSeconds(1.0)).Take(3))
    .Subscribe(x => Console.WriteLine(x));

它产生:

42
0
1
2

如果 RxJava 做任何不同的事情,我会感到震惊。

【讨论】:

    【解决方案2】:

    如果有人来找这个,这里有一个例子

    Observable.concat(
        coldObservable.doOnComplete{ () -> Log.d(TAG, "cold observable completed"); },
        hotObservable.doOnComplete{ () -> Log.d(TAG, "hot observable completed") }
    .subscribe()
    

    将记录所有冷观测值的值,然后是“冷观测已完成”,然后是所有热观测值。假设它类似于没有完成状态的点击侦听器,则不会记录“hot observable completed”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多