我有这样的课程A
:
A {
id: Long
eventId: Long
event: Event
}
B{
id:Long
name: String
}
我想通过执行:
来检索A.aService.getA(id)
然后使用结果(具有null
事件)使用eventId
来检索正确的Event
(eventService.getEvent()
),将其分配给A.event
,然后返回A
。
如何链接请求以实现此目的?我尝试使用flatmap返回Event
,但后来我丢失了A
的结果。
这是我目前的实施:
aRepository.getA().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
loadingState.onNext(true)
}
.doOnEvent { t1: Highlight, t2 ->
loadingState.onNext(false)
}
.subscribeWith(object : DisposableSingleObserver<A>() {
override fun onSuccess(a: A) {
aObservable.onNext(a)
}
override fun onError(e: Throwable) {
fetchErrors.onNext(e)
}
})
我试过了:
aRepository.getA()
.flatMap {
a: A ->
val event = eventsRepository.getEvent(a.eventId)
event
}
,subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
loadingState.onNext(true)
}
.doOnEvent { t1: Highlight, t2 ->
loadingState.onNext(false)
}
.subscribeWith(object : DisposableSingleObserver<A>() {
override fun onSuccess(a: A) {
aObservable.onNext(a)
}
override fun onError(e: Throwable) {
fetchErrors.onNext(e)
}
})
答案 0 :(得分:2)
使用flatMap
并将其内部流程映射回更新的原始值:
aRepository.getA()
.subscribeOn(Schedulers.io())
.flatMap(a -> {
if (a.event == null) {
return eventsRepository.getEvent(a.eventId)
.map(evt -> {
a.event = evt;
return a;
});
}
return Single.just(a);
})
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(/* ... */)
;