为什么在startWith中使用just或fromCallable时,Single的行为不同?

时间:2020-01-31 21:42:12

标签: rx-java2

我以PublishSubject开始testPublishSubject.startWith(createSingle().toObservable())

如果我订阅此观察项,然后再次配置并订阅,则它将根据我创建Single的方式发出不同的项目。如果我用just创建它,它发出的项目与第一次(item1)相同,如果我用fromCallable创建它,它发出的更新的项目(item2 )。为什么行为不同?有没有办法使用just并使其表现得像fromCallable

编辑:好吧,我想我知道为什么它的行为有所不同。这是因为它没有重新创建SinglefromCallable仅由于关闭而起作用,关闭会使用更新后的计数器再次执行。

我更新的问题是:有没有办法让主题重新创建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")
}

0 个答案:

没有答案