将rx可观察到的api调用转换为kotlin协程

时间:2020-10-28 09:22:07

标签: java android kotlin kotlin-coroutines

我有一个api调用,我是从android应用程序发出的以获取一些数据,我曾经使用rx java /带有改造的用例来进行api调用,我将其移至使用kotlin协程。

我已将功能callOnBandRXJava转换为callOnBandCoroutines

我有两个问题

1-我想检查新功能callOnBandCoroutines是否是使用协程的正确方法。

2-另外,我的另一个问题是,如果我想测试此功能,那么在使用launch(Dispatchers.IO) withContext(Dispatchers.Main)时该怎么做。

这是在我的演示者层中

class BaseOrderViewPresenter @Inject constructor(
private val app: App,
private val orderRepository: OrderRepository,
private val onStandUseCase: OnStandUseCase) : BaseOrderViewContract.Presenter, CoroutineScope {

private var job: Job = Job()

override val coroutineContext: CoroutineContext
    get() = Dispatchers.IO + job

fun callOnBandRXJava(serOrder: SerOrder, action: TimestampedAction, callback: (GenericResponse?) -> Unit) {
        onBandUseCase.execute(
            serOrder.serType,
            serOrder.id, action,
            object : Subscriber<GenericResponse>() {
                override fun onNext(response: GenericResponse?) {
                    callback.invoke(response)
                }

                override fun onCompleted() {}

                override fun onError(e: Throwable?) {
                    onBandResponseErrors()
                }
            })
    }

fun callOnBandCoroutines(serOrder: SerOrder, action: TimestampedAction, callback: (GenericResponse?) -> Unit) {
       launch(Dispatchers.IO) {
           try {
           val response = orderRepository.notifyOnBandSuspend( serOrder.serType,
                   serOrder.id,
                   action)

               withContext(Dispatchers.Main) {
                   callback.invoke(response)
               }
           } catch (exception: Exception) {
               onBandResponseErrors()
           }
       }
    }

}

提前感谢一吨

R

0 个答案:

没有答案