如何从 rxjava 平面地图调用协程用例

问题描述

嗨,我有一个 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>

这是错误的图像

enter image description here

请提供有关如何解决此问题的任何建议

提前致谢 R

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)