如何防止使用 suspendCancellableCoroutine 的 try catch
How to prevent the usage of try catch with suspendCancellableCoroutine
我做了一个在我的交互器中调用异步方法的协程,问题是当继续块被执行时,我不想使用 try catch 块,因为我认为这不是正确的方法.
主持人
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
If async block may throw exception don’t rely on wrapping it with
try/catch block.
您没有使用 async
块,所以 try catch 正是您应该用来包装 suspend
方法调用的异常的方法。
我做了一个在我的交互器中调用异步方法的协程,问题是当继续块被执行时,我不想使用 try catch 块,因为我认为这不是正确的方法.
主持人
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
If async block may throw exception don’t rely on wrapping it with try/catch block.
您没有使用 async
块,所以 try catch 正是您应该用来包装 suspend
方法调用的异常的方法。