myanmarking
07/30/2019, 1:43 PMsuspend fun requestStepsActivity(): List<Something> = suspendCancellableCoroutine { emitter ->
val listener = object : SimpleEventListener() {
override fun onSent() {
emitter.resume(Something)
}
override fun onFailedSending() {
emitter.resumeWithException(RuntimeException())
}
}
try {
someApi.addListener(listener)
someApi.requestData()
} catch (e: Throwable) {
emitter.resumeWithException(e)
} finally {
someApi.removeListener(listener)
}
}
Matej Drobnič
07/30/2019, 1:45 PMmyanmarking
07/30/2019, 1:47 PMMatej Drobnič
07/30/2019, 1:49 PMrequestData
throw exception though?myanmarking
07/30/2019, 1:50 PMsuspend fun requestStepsActivity(): List<Something> = suspendCancellableCoroutine { emitter ->
val listener = object : SimpleEventListener() {
override fun onSent() {
cleanUp()
emitter.resume(Something)
}
override fun onFailedSending() {
cleanUp()
emitter.resumeWithException(RuntimeException())
}
}
emitter.invokeOnCancellation { cleanUp() }
try {
someApi.addListener(listener)
someApi.requestData()
} catch (e: Throwable) {
cleanUp()
emitter.resumeWithException(e)
}
fun cleanUp(){
someApi.removeListener(listener)
}
}
so the full code must be like this ?Matej Drobnič
07/30/2019, 1:50 PMmyanmarking
07/30/2019, 1:50 PMMatej Drobnič
07/30/2019, 1:50 PMmyanmarking
07/30/2019, 1:51 PMMatej Drobnič
07/30/2019, 1:53 PMsomeApi
doesmyanmarking
07/30/2019, 1:53 PMMatej Drobnič
07/30/2019, 1:53 PMsomeApi
object is only used once, then you do not need to remove listener after success/errormyanmarking
07/30/2019, 1:54 PMMatej Drobnič
07/30/2019, 1:55 PMemitter
from the listenermyanmarking
07/30/2019, 1:56 PMMatej Drobnič
07/30/2019, 1:58 PMrequestData(listener)
though. Your example design looks a bit odd to me, unless listener can survive through multiple requestData
calls, in case I think there are bigger issues.myanmarking
07/30/2019, 2:02 PMMatej Drobnič
07/30/2019, 2:04 PM