Я работаю с java rx версии 1.2.10
В моем Api мне нужно соединить два асинхронных вызова: первый вызов дает мне элементы Второй вызов дает мне подэлементы из этого элемента, но еслиподэлементы имеют больше «подэлементов». Я должен рекурсивно вызывать второй метод и добавлять соответствующие подэлементы.
В своем коде я написал что-то вроде вызова первого:
override fun getSportList(dCSServiceContext: DCSServiceContext): Single<List<EntityBrowse>> {
return dCSService.get(dCSServiceContext).flatMap { item ->
val entityBrowseList = arrayListOf<EntityBrowse>()
val section = builSection(item?.firstOrNull()!!)
if (item.firstOrNull()?.collections?.get("NavItems")?.size!! > 0) {
dCSServiceContext.contentIds = item.firstOrNull()?.collections?.get("NavItems")
//This is the second call.
buildNavItems(dCSServiceContext).map { sectionItems ->
return@map sectionItems
}.map { items ->
section.items = items
return@map entityBrowseList
}
} else {
Single.just(entityBrowseList)
}
}
}
ВРекурсивный buildNavItems, у меня есть следующее:
private fun buildNavItems(dCSServiceContext: DCSServiceContext): Single<MutableList<Item>> {
return dCSService.get(dCSServiceContext).map { itemsResponse ->
val items: MutableList<Item> = arrayListOf()
itemsResponse.forEach { item ->
val transformedItem = buildItem(item!!)
if (item?.collections?.get("NavItems") != null) {
dCSServiceContext.contentIds = item?.collections?.get("NavItems")
//Alternative 2: Recursion to fill the internal items, this code is not been called now.
buildNavItems(dCSServiceContext).map { childrenItems ->
val section = Section("", "", false,childrenItems )
val data = Data(section)
val children = Children(data)
transformedItem.children = children
items.add(transformedItem)
}
} else {
val transformedItem = buildItem(item!!)
items.add(transformedItem)
}
}
return@map items
//Single.just(items)
}
}
Проблема в том, что рекурсивный вызов buildNavItems (dCSServiceContext) .map никогда не выполнялся, я пытался использовать flatMap, но после окончания выполненияэтот код никогда не вызывался, и эти подэлементы не были добавлены в окончательный список.