我现在正在为代码苦苦挣扎,我正在递归调用中从方法中返回单个代码。
我现在无法从“承诺”中返回一个简单的对象,在这种情况下,我必须返回一个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中返回简单对象。但我无法实现这一目标,我认为这不是解决此问题的好方法。