У меня есть следующий метод, который возвращает Single:
override fun getNavItemById(dCSServiceContext: DCSServiceContext):Single<NavItem>{
return scribeProvider.getNavItemById(dCSServiceContext).map{ navItem ->
return@map scribePresenter.presentNativeItem(navItem)
}
}
Но мне нравится, что этот метод возвращает только объект, что-то вроде:
override fun getNavItemById(dCSServiceContext: DCSServiceContext):NavItem{
return scribeProvider.getNavItemById(dCSServiceContext).map{ navItem ->
return@map scribePresenter.presentNativeItem(navItem)
}// I need just the object in order to pass this result as a parameter to other method
}
Есть идеи, как это сделать элегантно?
Большое спасибо!
ScribePresenter.presentNativeItem (navItem) возвращает NavItem, и это то, что мне нужно.





добавление .blockingGet() в конец вашего потока должно помочь. Он вернет фактическое значение вместо Single
Это должно выглядеть примерно так
return scribeProvider.getNavItemById(dCSServiceContext)
.map { navItem -> return@map scribePresenter.presentNativeItem(navItem)
}.blockingGet()
Есть ли способ добиться этого без использования блокировки вызова? Я работаю с асинхронными вызовами
Да, просто измените подпись метода, чтобы вернуть void и передать слушателя в качестве дополнительного параметра в методе, подписаться на наблюдаемый и передать значение обратно через слушателя
измените тип возврата
scribePresenter.presentNativeItem(navItem)или используйтеSingle.blockingGet()(хотя старайтесь избегать подобных методов блокировки rx)