Muh*_*lib 1 android kotlin firebase-authentication kotlin-coroutines
我使用挂起例程构建器使 Firebase 任务从基于异步侦听器的代码转移到基于协程的代码。
这是我的 suspendcoroutine,通过它我实现了协程行为。
suspend fun <T> Task<T>.awaitTask(): T =
suspendCoroutine { continuation ->
addOnCompleteListener { task ->
if (task.isSuccessful) {
continuation.resume(task.result!!)//what to do if task.result is null
} else {
continuation.resumeWithException(task.exception!!)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我调用它的方式
firebase.createUserWithEmailAndPassword(userCredentials.email!!, userCredentials.password!!).awaitTask()
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我们执行一个可能为空结果的任务。喜欢 。
firebase.currentUser?.updateProfile(profileUpdates)?.awaitTask()
Run Code Online (Sandbox Code Playgroud)
这里在成功更新后,task.result 为空。在那种情况下,应该将什么传递给 continuation.resume?。
您的返回类型应该可以为空,因为可以Task.getResult()为空:
suspend fun <T> Task<T>.await() : T? = ...
Run Code Online (Sandbox Code Playgroud)
如果您使用它来获得不可为空的结果,则在使用站点而不是在实现内部强制执行不可为空性。
但是,当它已经在 中定义时,您为什么还要重新实现它kotlinx-coroutines-play-services?
| 归档时间: |
|
| 查看次数: |
1337 次 |
| 最近记录: |