问题描述
嗨,我有一个 rxjava 平面地图,我想在其中调用协程用例 onStandUseCase,这是一个 api 调用
最初用例也是基于 rxjava 的,它曾经返回 Observable<GenericResponse>
并且工作正常
现在我将使用更改为基于协程的它只返回 GenericResponse
请如何修改平面图以在协程用例中正常工作
subscriptions += view.startFuellingObservable
.onBackpressureLatest()
.doOnNext { view.showLoader(false) }
.flatMap {
if (!hasOpenInopIncidents()) {
//THIS IS WHERE THE ERROR IS IT RETURNS GENERICRESPONSE
onStandUseCase(OnStandUseCase.Params("1","2",TimestampedAction("1",DateTime.now()))) {
}
} else {
val incidentOpenResponse = GenericResponse(false)
incidentOpenResponse.error = OPEN_INCIDENTS
Observable.just(incidentOpenResponse)
}
}
.subscribe(
{ handleStartFuellingClicked(view,it) },{ onStartFuellingError(view) }
)
OnStandUseCase.kt
class OnStandUseCase @Inject constructor(
private val orderRepository: OrderRepository,private val serviceOrderTypeProvider: ServiceOrderTypeProvider
) : UseCaseCoroutine<GenericResponse,OnStandUseCase.Params>() {
override suspend fun run(params: Params) = orderRepository.notifyOnStand(
serviceOrderTypeProvider.apiPathFor(params.serviceType),params.id,params.action
)
data class Params(val serviceType: String,val id: String,val action: TimestampedAction)
}
用例协程
abstract class UseCaseCoroutine<out Type,in Params> where Type : Any {
abstract suspend fun run(params: Params): Type
operator fun invoke(params: Params,onResult: (type: Type) -> Unit = {}) {
val job = GlobalScope.async(Dispatchers.IO) { run(params) }
GlobalScope.launch(Dispatchers.Main) { onResult(job.await()) }
}
}
startFuellingObservable 是
val startFuellingObservable: Observable<Void>
这是错误的图像
请提供有关如何解决此问题的任何建议
提前致谢 R
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)