为什么不能将 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
开始?
否则,我不清楚你的设计,因为它过于关注主题而不是某些事件的单一发起者。
至少在移动应用中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
开始?
否则,我不清楚你的设计,因为它过于关注主题而不是某些事件的单一发起者。