Я сделал сопроцессор, который вызывает асинхронный метод в моем интеракторе, дело в том, что когда выполняется блок продолжения, я не хочу использовать блок try catch, так как считаю, что это неправильный способ сделать это.
Presenter
override fun signInWithCoroutines(email: String, password: String) {
launch {
view?.showProgress()
try{
signInInteractor.signInWithCoroutinesTest(email,password)
}catch(e FirebaseLoginException){ ---> want to know if there is another way to do this
view.showError(e.getMessage())
}
view?.hideProgress()
view?.navigateToMain()
}
}
SignInInteractor
override suspend fun signInWithCoroutinesTest(email: String, password: String): Unit = suspendCancellableCoroutine { continuation ->
FirebaseAuth.getInstance()?.signInWithEmailAndPassword(email, password)?.addOnCompleteListener {
if (it.isSuccessful) {
continuation.resume(Unit)
} else {
continuation.resumeWithException(FirebaseLoginException("Error while login in, try again")
}
}
}
Вопрос
Есть ли другой способ поймать продолжение и исключение в моем докладчике от моего интерактора?
Я прочитал, что блок try catch является анти-шаблоном для работы с сопрограммами
https://proandroiddev.com/kotlin-coroutines-patterns-anti-patterns-f9d12984c68e
Если асинхронный блок может выдать исключение, не полагайтесь на его перенос
блок try / catch.