【问题标题】:One Observable should emit items based on another Observable emitted items and both Observables are not connected一个 Observable 应该基于另一个 Observable 发射的项目发射项目,并且两个 Observable 都没有连接
【发布时间】:2019-01-17 22:03:55
【问题描述】:

我有两个不同的 Observables,它们的行为是

Observable one behavior -> 这将被创建,一个 DisposableObserver 将订阅它并对 Observable One 发出的项目做出反应。这将持续运行,直到应用关闭。

Observable 两个行为 -> 这将在不同的时间被创建并订阅到不同的 Observer,并且在订阅之后,它应该根据 Observable 一个在订阅 Observable 后发出的值发出值。一旦工作完成 Observable 两个订阅将被处理,但 Observable 一个应该继续。

如何使第二个 Observable 基于 Observable 发出的值发出值并在完成后处理它?

【问题讨论】:

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


    【解决方案1】:

    如果observableOne 只能有一个订阅,您可以通过多种方式进行。最简单的方法是引入一个Subject;它将订阅observableOne,所有其他订阅者都将订阅该主题:

    PublishSubject<DataType> observableOneStream = PublishSubject.create();
    
    observableOne
      .subscribe( observableOneStream );
    ...
    observableOneStream.subscribe( firstSubscription );
    ...
    observableOneStream.subscribe( secondSubscription );
    

    【讨论】:

      【解决方案2】:

      您可以将 Observable 1 中的 flatMap 值转换为 Observable 2。

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

      然后您可以使用方法Observable&lt;ObsTwoValue&gt; observableTwo(ObsOneValue obsOneValue),它将基于 Observable 1 的排放创建 Observable 2。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 2020-10-02
        • 2021-06-30
        相关资源
        最近更新 更多