Как предотвратить использование try catch с помощью suspendCancellableCoroutine - PullRequest
0 голосов
/ 25 мая 2019

Я сделал сопроцессор, который вызывает асинхронный метод в моем интеракторе, дело в том, что когда выполняется блок продолжения, я не хочу использовать блок 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.

1 Ответ

1 голос
/ 25 мая 2019

Вы не используете блок async, поэтому попробуйте catch, это именно то, что вы должны использовать для переноса исключений, вызываемых методом suspend.

...