Я сейчас работаю с библиотекой java rx, у меня проблемы с внутренними вызовами с flatMap и map, по какой-то причине не выполняется самый внутренний вызов.
Кроме того, если я заменюflatMap с suscribe () во внутреннем вызове (перед кодом childrenItemsResponse.forEach) этот код выполняется, но выполнение не синхронно, я имею в виду, что этот вызов выполняется после завершения основного выполнения flatMap.
Это мой код:
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")
buildNavItems(dCSServiceContext).map { section ->
return@map section
}.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")
val childrenItems: MutableList<Item> = arrayListOf()
dCSService.get(dCSServiceContext).flatMap { childrenItemsResponse ->
childrenItemsResponse.forEach { childrenItem ->
val transformedChildrenItem = buildItem(childrenItem!!)
childrenItems.add(transformedChildrenItem)
}
val section = Section("", "", false,childrenItems )
val data = Data(section)
val children = Children(data)
transformedItem.children = children
items.add(transformedItem)
Single.just(items)
}
} else {
val transformedItem = buildItem(item!!)
items.add(transformedItem)
}
}
return@map items
//Single.just(items)
}
}
Более конкретно, в строке кода: dCSService.get(dCSServiceContext).flatMap { childrenItemsResponse ->
Этот код никогда не выполняется.
Я не уверен, в чем может быть причина проблемы.
Заранее спасибо !!