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