我以PublishSubject
开始testPublishSubject.startWith(createSingle().toObservable())
。
如果我订阅此观察项,然后再次配置并订阅,则它将根据我创建Single
的方式发出不同的项目。如果我用just
创建它,它发出的项目与第一次(item1
)相同,如果我用fromCallable
创建它,它发出的更新的项目(item2
)。为什么行为不同?有没有办法使用just
并使其表现得像fromCallable
?
编辑:好吧,我想我知道为什么它的行为有所不同。这是因为它没有重新创建Single
。 fromCallable
仅由于关闭而起作用,关闭会使用更新后的计数器再次执行。
我更新的问题是:有没有办法让主题重新创建Single
?我想要这个的原因是因为Single正在获取一个值,该值可能已经更新,因此我需要再次获取它。
var counter = 1
// With this, it works as expected
// fun createSingle(): Single<String> = Single.fromCallable {
// "item-${counter++}"
// }
// With this, the second subscription still shows "item-1
fun createSingle(): Single<String> = Single.just("item-${counter++}")
val testPublishSubject = PublishSubject.create<String>()
val observable = testPublishSubject.startWith(createSingle().toObservable().doOnNext {
log(">>> single on next: $it")
}).doOnNext {
log(">>> publish subject on next: $it")
}
log(">>> subscribing1")
val disposable1 = observable.subscribe {
log(">>> value subscription 1: $it")
}
log(">>> pushing random item")
testPublishSubject.onNext("random item")
log(">>> disposing subscription1")
disposable1.dispose()
log(">>> subscribing2")
val disposable2 = observable.subscribe {
log(">>> value subscription 2: $it")
}