【问题标题】:Idiomatically creating hot observables with BehaviorSubject in RxKotlin / RxJava在 RxKotlin / RxJava 中使用 BehaviorSubject 惯用地创建热可观察对象
【发布时间】:2018-02-01 17:08:04
【问题描述】:

目前我正在使用 RxKotlin 在 Kotlin 中构建一个项目。我在 Rx 方面的背景主要是基于 RxJS。

我经常用于在 Typescript 中创建 hot observables 的模式看起来类似于以下内容:

  private dataStore: IFoo;
  private dataStoreSubject: BehaviorSubject<IFoo> = new BehaviorSubject(this.dataStore);
  public dataStoreObservable: Observable<IFoo> = Observable.from(this.dataStoreSubject);

  public getNetworkData(): Observable<IFoo[]> {
      return this.http.get()
         .map((response: IResponse) => {
             this.dataStore = <IFoo[]>response;
             this.dataStoreSubject.next(this.dataStore);
             return this.dataStore;
          });
   }

这将允许我公开Observable,而不公开Subject 和随后的subject.next(); 方法。

我的问题是:在 RxKotlin 或 RxJava 中建立类似逻辑的最惯用的方法是什么?

【问题讨论】:

  • 所以你只想hide() SubjectObserver 方法? (看看我在那里做了什么?)
  • 这很有帮助@GergelyKőrössy!此外,我试图找到BehaviorSubjectObservable 之间的关系,因为在Typescript 中,从RxJava 中的BehaviorSubject 创建Observable 相当简单,似乎它在BehaviorSubject 需要的地方反向工作来源Observable。向我的观察者公开BehaviorSubject 是否被认为是正当的?
  • BehaviorSubject 可以使用其静态 create() 方法创建,而无需任何“外部”。
  • 我知道BehaviorSubject.create()。就像我之前说的,我很好奇BehaviorSubjectObservable 之间的关系。我知道我可以四处创建随机的BehaviorSubjects,但这并不一定能解释BehaviorSubjectObservable 之间的相关性,或者如果公开BehaviorSubject 是一个惯用的设计决策。
  • 我不确定我是否理解您的问题。 Subjects 通常同时是Observables 和Observers。您可以将 Subject 用于内部用途,因为它具有“推送”方法 (on***),并且您可以使用 hide 运算符返回 Observable,因此调用者无法访问这些方法。

标签: java rxjs rx-java rx-java2 rx-kotlin


【解决方案1】:

您需要使用 compose 和 transform。您可以在您的主题和可观察对象之间添加“链接”到转换中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多