Возврат объекта из Single от вызовов asy - PullRequest
0 голосов
/ 08 января 2019

Сейчас я борюсь со своим кодом, я возвращаю сингл из метода в рекурсивных вызовах.

Я теперь, когда невозможно вернуть простой объект из «Обещания», в этом случае мне нужно вернуть 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. но я не смог этого добиться, и я думаю, что это плохой способ решить эту проблему.

...