gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:38:33 24 4
gpt4 key购买 nike

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

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

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

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

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

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

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

最佳答案

它不会正确组合,运算符是避免方法调度问题的 final方法。此外,如果您 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 开始的链中获取当前值?

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

关于android - 为什么不能将 BehaviorSubject 映射到另一个 BehaviorSubject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45650120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com