【发布时间】:2021-08-03 08:55:22
【问题描述】:
Coroutines and RxJava3
我有以下方法,它首先调用一个挂起方法,并在同一个启动范围内我对 RxJava 进行了 2 次调用。
我想知道是否有办法将 Rxjava 代码从viewModelScope.launch 范围中删除并返回fetchRecentUseCase.execute() 的结果。
基本上,viewModelScope.launch 是否有可能返回 listOfProducts 而不是在启动范围内执行所有操作?
fun loadRecentlyViewed() {
viewModelScope.launch {
val listOfProducts = withContext(Dispatchers.IO) {
fetchRecentUseCase.execute()
}
val listOfSkus = listOfProducts.map { it.sku }
if (listOfSkus.isNotEmpty()) {
loadProductUseCase.execute(listOfSkus)
.subscribeOn(schedulersFacade.io)
.flatMap(convertProductDisplayUseCase::execute)
.map { /* work being done */ }
.observeOn(schedulersFacade.ui)
.subscribeBy(
onError = Timber::e,
onSuccess = { }
)
}
}
}
挂起方法的用例
class FetchRecentUseCaseImp() {
override suspend fun execute(): List<Products> {
// Call to network
}
}
在此先感谢
【问题讨论】:
-
loadProductUseCase.execute的返回类型究竟是什么?你说你想返回产品列表,但你的代码看起来像是将该列表映射到 Skus,然后使用 Rx 执行另一个操作将它们转换回产品,也许? -
抱歉,我已经编辑了这个问题。基本上,我想从
viewModelScope.launch返回结果。
标签: kotlin rx-java kotlin-coroutines