RxJava v1.0.13 wprowadziła nowy typ obserwowalnego: rx.Single. Pasuje on świetnie do modelu żądanie-odpowiedź, ale brakuje standardowych efektów ubocznych wprowadzających operatorów takich jak doOnNext(). W rezultacie znacznie trudniej jest dokonać wielu rzeczy.Jak utworzyć buforowanie/gorącą wersję rx.Single?
Mój pomysł polegał na zamianie doOnNext() z wieloma subskrypcjami na tę samą pojedynczą instancję. Może to jednak powodować wielokrotne wykonywanie czynności nakładania: raz na każdą subskrypcję. Realizacja
Przykład rx.Single:
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())
Zastosowanie:
single.subscribe({}, {})
single.subscribe({}, {}) // Data is fetched for the second time
Czy to możliwe, aby utworzyć instancję pojedynczych że nie będzie fetchSomeData() wiele razy, nawet gdy single.subscribe() jest nazywane wiele razy, ale pamięć podręczna i zwracają ten sam wynik?
nie byłby to krok wstecz z użyciem Jedynka w pierwszej kolejności? – atok
czy zamieścisz przykład kodu, aby rozwiązanie nie wymagało wywnioskowania? –