为什么不能将 BehaviorSubject 映射到另一个 BehaviorSubject

Why is it not possible to map BehaviorSubject to another BehaviorSubject

至少在移动应用中BehaviorSubject被频繁使用,建模一个属性 - 它有一个当前值,可以随时查询,观察。

有时只想转换 BehaviorSubject 而无需订阅它。例如。如果有 class,它充当几个转换后的 BehaviorSubject 和潜在订阅者之间的中间层。

我在这里遇到的问题,至少在 RxJava2 中,是在 BehaviorSubject returns 上应用运算符总是 Observable。所以我的中间层不能再提供 BehaviorSubject 的 api。

一个可能的解决方案是创建新的 BehaviorSubject 并将它们订阅到原来的 BehaviorSubject 但总体上这似乎是个坏主意,也许我现在不想订阅但只是按需,即当我的中间层的用户实际需要这些主题时?

在我的例子中,上下文是一个具有 MVVM 模式的 Android 应用程序,其中视图模型将 BehaviorSubject 暴露给视图,这些视图大部分来自另一个 BehaviorSubject在应用程序中。我目前在视图模型中订阅,但我想改进这一点,因为视图模型并不是真正的消费者,不应该订阅任何东西——当视图实际需要他们的东西时,应该激活主题。

不,我不能在视图模型中只使用 Observable,因为有单元测试和其他一些检查某个点值的调用,这不能仅使用 Observable.

我的主要问题是为什么不能简单地将 BehaviorSubject 转换为另一个 BehaviorSubject。也很高兴,在所描述的上下文中使用 BehaviorSubject 的推荐方法是什么。

它不会正确组合,运算符是避免方法调度问题的最终方法。另外,如果你 onNext 转换后的主题,同时 onNext 原始主题,你会为最终消费者创建多个入口点,并且可能违反 Observable 契约。

但是您可以将多个主题合并在一起,每个主题都由各自的事件驱动,最终消费者将正确接收事件。

And no I can't use only Observable in the view model as there are unit tests and some other calls that check for the value at a point, which can't be done using only Observable.

你有没有试过blockingFirst()从一个链中获取当前值,这个链从那些原始的BehaviorSubject开始?

否则,我不清楚你的设计,因为它过于关注主题而不是某些事件的单一发起者。