我现在正在使用java rx库,在使用flatMap和map进行内部调用时遇到问题,由于某些原因,大多数内部调用未完成。
此外,如果我在内部调用中使用suscribe()替换flatMap(在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 ->
此代码永远不会执行。
我不确定是什么原因引起的。
提前谢谢!
答案 0 :(得分:0)
要激活观察者链,必须进行订阅。您没有订阅以dCSService...
开头的观察者链。 flatMap()
本身将不会订阅其内部可观测对象,除非已订阅了外部可观测链。