从通话中返回单一对象

时间:2019-01-08 17:13:18

标签: recursion rx-java

我现在正在为代码苦苦挣扎,我正在递归调用中从方法中返回单个代码。

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

0 个答案:

没有答案