如何解决如何将协程用例的响应与 rx observable 匹配
我有一个返回 GenericResponse
的协程用例(api 调用),我试图从 rx java flatmap 调用它。期望 observable
为 GenericResponse
。
当我的用例返回 GenericResponse
时,我试图从不起作用的用例返回 Observable.just(it)
。我收到类型不匹配错误
我想将 UseCase 的 GenericResponse 转换为 Observable.just(GenericResponse(false))
我不确定这是否是正确的处理方式
请提出任何建议
这是我的平面图
subscriptions += view.startFuellingObservable
.onBackpressureLatest()
.doOnNext { view.showLoader(false) }
.flatMap {
if (!hasOpenInopIncidents()) {
launch {
withContext(Dispatchers.IO) {
onStandUseCase(OnStandUseCase.Params("1","2",TimestampedAction("1",DateTime.now()))) {
//RESPONSE IS GENERICRESPONSE WHICH I AM PLACING IN A OBSERVABLE
Observable.just(it)
}
}
}
}
else {
val incidentOpenResponse = GenericResponse(false)
incidentOpenResponse.error = OPEN_INCIDENTS
Observable.just(incidentOpenResponse)
}
}
.subscribe(
{ handleStartFuellingClicked(view,it) },{ onStartFuellingError(view) }
)
OnStandUseCase.kt
@PerApp
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()) }
}
}
查看合同
val startFuellingObservable: Observable<Void>
这是错误信息
请提供有关如何解决此问题的任何建议
谢谢 R
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。