В RxJava v1.0.13 введен новый тип наблюдаемого: rx.Single. Он отлично подходит для модели запроса-ответа, но не имеет стандартных побочных эффектов, вводящих операторов, таких как doOnNext(). Таким образом, гораздо сложнее сделать несколько вещей в результате.
Моя идея состояла в том, чтобы заменить doOnNext() несколькими подписками на один и тот же единственный экземпляр. Но это может привести к тому, что подстилающая работа будет выполняться несколько раз: один раз за каждую подписку.
Пример rx. Одна реализация:
private class WorkerSubscribe<SomeData>() : Single.OnSubscribe<SomeData> {
override fun call(sub: SingleSubscriber<in SomeData>) {
try {
val result = fetchSomeData()
sub.onSuccess(result)
} catch(t: Throwable) {
sub.onError(t)
}
}
}
val single = Single.create<SomeData>(WorkerSubscribe())
Использование:
single.subscribe({}, {})
single.subscribe({}, {}) // Data is fetched for the second time
Возможно ли создать экземпляр Single, который не будет fetchSomeData() несколько раз, даже когда single.subscribe() вызывается несколько раз, но кеш и возвращает тот же результат?