一个Observable应该根据另一个Observable发射的项目发射物品,并且两个Observable都没有连接

时间:2019-01-16 21:45:40

标签: rx-java rx-java2 rx-kotlin2

我有两个行为类似的Observables

可观察的一种行为->这将被创建,并且一个DisposableObserver将被订阅,并对可观察的一种发出的项目做出反应。这将一直运行,直到关闭应用程序。

可观察到的两个行为->这将在不同的时间创建并订阅到其他观察者,并且在订阅之后,这应基于观察到的两个被订阅后基于可观察的一个发出的值来发射值。作业完成后,可观察的两个订阅将被处置,但可观察的一个订阅应继续。

如何根据可观察的一个发射值使第二个可观察的发射值完成后进行处置?

2 个答案:

答案 0 :(得分:1)

如果observableOne只能有一个订阅,则可以采用两种方法。最简单的方法是引入Subject;它将订阅observableOne,所有其他订阅者将订阅主题:

PublishSubject<DataType> observableOneStream = PublishSubject.create();

observableOne
  .subscribe( observableOneStream );
...
observableOneStream.subscribe( firstSubscription );
...
observableOneStream.subscribe( secondSubscription );

答案 1 :(得分:0)

您可以将flatMap中的值从“可观察的一个”转换为“可观察的两个”。

observableOne.flatMap(obsOneValue -> observableTwo(obsOneValue))
        .subscribe(obsTwoValue -> {

        });

然后您可以使用方法Observable<ObsTwoValue> observableTwo(ObsOneValue obsOneValue),该方法将基于可观察到的一种排放来创建可观察到的两种。