FirebaseAuth - 我如何等待价值
FirebaseAuth - how can I wait for value
我使用 FirebaseAuth 注册新用户
class FirebaseAuthenticationServiceImpl(): FirebaseAuthenticationService {
override fun registerWithEmailAndPassword(email: String, password: String): Boolean {
val registration = FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
.addOnSuccessListener {
println(it.additionalUserInfo?.providerId.toString())
}.addOnFailureListener {
println(it.message.toString())
}
return registration.isSuccessful
}
}
我每次都调用上面的函数 false
。一段时间后我得到 true
coroutineScope {
try {
if (firebaseService.registerWithEmailAndPassword(email, password)) {
openHomeActivity.offer(Unit)
} else {}
} catch (e: Exception) {}
}
我如何才能等待结果 (success/failure) 并获得该值?
FirebaseAuthenticationService 来自哪里?你需要它吗?官方入门指南只是使用Firebase.auth
。有了这个,您可以使用 await()
挂起函数而不是使用回调方法进行身份验证。
// In a coroutine:
val authResult = Firebase.auth.registerWithEmailAndPassword(email, password).await()
val user: FirebaseUser = authResult.user
if (user != null) {
openHomeActivity.offer(Unit)
} else {
// authentication failed
}
如果您正在使用协同程序,您可以使用 suspendCoroutine
,它是传统回调和协同程序之间的完美桥梁,因为它使您可以访问 Continuation<T>
对象,例如 Task<R>
个对象:
scope.launch {
val registrationResult = suspendCoroutine { cont -> cont.suspendTask(FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password) }
}
private fun <R> Continuation<R>.suspendTask(task: Task<R>) {
task.addOnSuccessListener { this.success(it) }
.addOnFailureListener { this.failure(it) }
}
private fun <R> Continuation<R>.success(r : R) = resume(r)
private fun <R> Continuation<R>.failure(t : Exception) = resumeWithException(t)
我使用 FirebaseAuth 注册新用户
class FirebaseAuthenticationServiceImpl(): FirebaseAuthenticationService {
override fun registerWithEmailAndPassword(email: String, password: String): Boolean {
val registration = FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
.addOnSuccessListener {
println(it.additionalUserInfo?.providerId.toString())
}.addOnFailureListener {
println(it.message.toString())
}
return registration.isSuccessful
}
}
我每次都调用上面的函数 false
。一段时间后我得到 true
coroutineScope {
try {
if (firebaseService.registerWithEmailAndPassword(email, password)) {
openHomeActivity.offer(Unit)
} else {}
} catch (e: Exception) {}
}
我如何才能等待结果 (success/failure) 并获得该值?
FirebaseAuthenticationService 来自哪里?你需要它吗?官方入门指南只是使用Firebase.auth
。有了这个,您可以使用 await()
挂起函数而不是使用回调方法进行身份验证。
// In a coroutine:
val authResult = Firebase.auth.registerWithEmailAndPassword(email, password).await()
val user: FirebaseUser = authResult.user
if (user != null) {
openHomeActivity.offer(Unit)
} else {
// authentication failed
}
如果您正在使用协同程序,您可以使用 suspendCoroutine
,它是传统回调和协同程序之间的完美桥梁,因为它使您可以访问 Continuation<T>
对象,例如 Task<R>
个对象:
scope.launch {
val registrationResult = suspendCoroutine { cont -> cont.suspendTask(FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password) }
}
private fun <R> Continuation<R>.suspendTask(task: Task<R>) {
task.addOnSuccessListener { this.success(it) }
.addOnFailureListener { this.failure(it) }
}
private fun <R> Continuation<R>.success(r : R) = resume(r)
private fun <R> Continuation<R>.failure(t : Exception) = resumeWithException(t)