Я пытаюсь переписать следующий rx-код таким образом, чтобы удалить подписку внутри другой подписки и сделать код более идиоматичным:
private fun foo() {
compositeDisposable.add(getApiDataObservable().subscribe({ result ->
if (!result.isSuccess) {
mutableLiveData.value = "errorMessage"
} else {
compositeDisposable.add(Observable.zip(firstObservable,
secondObservable,
BiFunction<FirstObject, SecondObject, Pair<FirstObject, SecondObject>>
{ obj1, obj2 -> Pair(obj1, obj2) }
).subscribe({
//there I need to use result and pair values
}, {
Timber.e(it)
}))
}
}))
}
Я пробовал что-то вроде этого:
private fun foo2() : Disposable {
return getApiDataObservable()
.filter { result.isSuccess }
.flatMap {
//it - result
Observable.zip(firstObservable,
secondObservable,
BiFunction<FirstObject, SecondObject, Pair<FirstObject, SecondObject>>
{ obj1, obj2 -> Pair(obj1, obj2) })
}.subscribe {
//it - Pair<FirstObject, SecondObject>
// here I need both - result and pair values
},{ mutableLiveData.value = "errorMessage"}
}
Но у меня возникло недопонимание в следующем пункте: как я могу получить значение - результат от getApiDataObservable()
и пару от Observable.zip(..)
позвонить в subscribe
.Первая мысль, которая приходит в голову: сохранить значение result в некоторой переменной и использовать его внутри subscribe
lambda.но, возможно, этого можно достичь более элегантным и more-rx способом.