gpt4 book ai didi

rx-java2 - RxJava Relay与主题

转载 作者:行者123 更新时间:2023-12-03 20:53:58 25 4
gpt4 key购买 nike

我试图了解Jake Warthon编写的该库的目的:
https://github.com/JakeWharton/RxRelay


基本上:除了无法调用onComplete或
onError。对象具有破坏性的状态:当他们收到
onComplete或onError它们不再可用于移动数据。


我知道这是一个有效的用例,但是仅使用现有主题就可以轻松实现以上目的。

1.不要将errors / completions事件转发给主题:

`observable.subscribe({ subject.onNext(it) }, { log error / throw exception },{ ... })`


2.不要暴露主题,而是让您的方法签名返回一个可观察的。

fun(): Observable<> { return subject }

我显然在这里遗漏了一些东西,我对此非常好奇!

class MyPublishRelay<I> : Consumer<I> {

private val subject: Subject<I> = PublishSubject.create<I>()

override fun accept(intent: I) = subject.onNext(intent)

fun subscribe(): Disposable = subject.subscribe()
fun subscribe(c: Consumer<in I>): Disposable = subject.subscribe(c)
//.. OTHER SUBSCRIBE OVERLOADS
}

最佳答案

subscribe具有重载,通常人们习惯于subscribe(Consumer)重载。然后他们使用主题,并且突然也调用onComplete。 RxRelay将用户从不考虑subscribe(Consumer)subscribe(Observer)之间差异的用户中解放出来。



不要将错误/完成事件转发给主题:



确实,但是根据我们在初学者的经验,他们通常不考虑这一点,甚至不知道可以考虑的可用方法。



不要暴露主题,而是让您的方法签名返回一个可观察的。



如果您需要一种将项目发送到主题的方法,则此方法无效。目的是使用主题来执行项目多播,有时是从另一个Observable。如果您完全控制Subject的排放,则应该有一个习惯,不要调用onComplete,也不要让其他任何东西来做。

关于rx-java2 - RxJava Relay与主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45518804/

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