Сейчас я борюсь со своим кодом, я возвращаю сингл из метода в рекурсивных вызовах.
Я теперь, когда невозможно вернуть простой объект из «Обещания», в этом случае мне нужно вернуть Single. Мой код выглядит так:
override fun getNavItemById(dCSServiceContext: DCSServiceContext): Single<NavItem> {
var result:Single<NavItem> = scribeProvider.getNavItemById(dCSServiceContext).map{ navItem ->
scribePresenter.presentNativeItem(navItem)
}
}
И метод, который использует последний:
private fun getItems(parentItem: Single<NavItem>, dCSServiceContext: DCSServiceContext): Observable<NavItem> {
parentItem.map {
if(it.hasChildren){
return@map Observable.merge(
Observable.just(parentItem),
Observable.from(it.childrenIds).map { id ->
var list = arrayListOf<Int>()
list.add(id)
dCSServiceContext.contentIds = list
return@map getNavItemById(dCSServiceContext)
}.flatMap { it1-> getItems(it1,dCSServiceContext) }.map { return@map it } )
} else {
Observable.just(parentItem)
}
}
}
Проблема в том, что я получаю проблему: требуется возвращаемое выражение в функции с телом блока. Я не уверен, как можно вернуть результат без разрыва цепочки, как вы видите, getItems вызывает рекурсию, и мне нужно иметь возможность работать с последним ответом.
Кроме того, я пытался вернуть простой объект в getNavItemById. но я не смог этого добиться, и я думаю, что это плохой способ решить эту проблему.