为什么这个协程会在 运行 时间崩溃?

Why does this coroutine crash at run time?

我试图确保我的应用程序在后端出现故障时做出适当的响应,我正在使用 realm/mongo 创建一个获取用户的异步任务。

我有这两个块:

override suspend fun logIn(accessToken: String) {
        val user = logInInternal(accessToken)
        realmAsyncOpen(user)
    }

private suspend fun logInInternal(accessToken: String) = suspendCancellableCoroutine<User> { continuation ->
        val customJWTCredentials: Credentials = Credentials.jwt(accessToken)
        app.loginAsync(customJWTCredentials) {
            if (it.isSuccess) {
                continuation.resumeWith(Result.success(app.currentUser()!!))
            } else {
                continuation.resumeWithException(RealmLoginException().initCause(it.error))
            }
        }
    }

logInInternal 当我点击 resumeWithException 部分时崩溃。我也尝试过使用 app.login(credentials),因为该方法正在暂停,但运气不佳。为什么我的应用程序在我异常恢复时崩溃?

我在命中时导致调用 502。

resumeWithException 的文档说:

Resumes the execution of the corresponding coroutine so that the exception is re-thrown right after the last suspension point.

这意味着您需要捕获该异常:

override suspend fun logIn(accessToken: String) {
    try {
        val user = logInInternal(accessToken)
        realmAsyncOpen(user)
    } catch(e: RealmLoginException /*or e: Exception - to catch all exceptions*/) {
        // handle exception
    } 
}