【发布时间】:2017-07-24 17:34:32
【问题描述】:
我有一个简单的 RxJava,使用 ReplaySubject,我可以得到打印所有 3 个数字的结果。
val observable : Observable<Int> = Observable.just(1, 2, 3)
val subject = ReplaySubject.create<Int>()
observable.subscribe(subject)
subject.subscribe{
result ->
System.out.println("Start $result in Subscription Result")
}
当我更改为 Behavior 时,我希望打印第三个数字,即 3,因为我一直认为 Behavior 是重播最后一个发出的项目。
val observable : Observable<Int> = Observable.just(1, 2, 3)
val subject = BehaviorSubject.create<Int>()
observable.subscribe(subject)
subject.subscribe{
result ->
System.out.println("Start $result in Subscription Result")
}
但是它不打印任何东西。为什么?
我在这里错过了什么重要的事情吗?如果是,请告诉我如何打印假设发出的最后一项(即 3)。
【问题讨论】:
-
BehaviorSubject在按设计完成后不保留最后一项。您应该使用ReplaySubject.createWithSize(1)始终重播替代测试,即使超出上游完成。 -
谢谢@akarnokd。如果我只想发出最后一项,而不是全部,该怎么办?
标签: java kotlin rx-java rx-java2