Я начинаю 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")
}