gpt4 book ai didi

android - Kotlin Coroutines中与RXJava等效的Completable.create-Android

转载 作者:行者123 更新时间:2023-12-02 13:34:47 25 4
gpt4 key购买 nike

我正在进行Firebase身份验证,其中需要将Firebase身份验证放在我的存储库中。我找到了有关如何执行此操作的文章,但它使用RxJava。 (https://www.simplifiedcoding.net/firebase-mvvm-example/)

现在,我想知道是否只有针对kotlin的解决方案,因为我不想使用RxJava,因为我正在使用kotlin协程。

fun facebookLogin(credential: AuthCredential) = Completable.create { emitter -> // change Completable.create since it is a RxJava
firebaseAuth.signInWithCredential(credential).addOnCompleteListener { task ->
if (!emitter.isDisposed) {
if (task.isSuccessful)
emitter.onComplete()
else
emitter.onError(task.exception!!)
}
}
}

最佳答案

Continuation
允许您将同步转换为异步

官方协程代码实验室过去曾对此进行过处理,但他们似乎已将其删除。样板大致如下所示:

suspend fun facebookLogin(...): Boolean {
return suspendCoroutine { continuation ->
firebaseAuth.signInWithCredential(credential).addOnCompleteListener { task ->

if (task.isSuccessful)
continuation.resume(true)
else
continuation.resumeWith(Result.failure(task.exception))
}
}
}
}

并从ViewModel调用它,您将
fun login () {
viewModelScope.launch{
facebookLogin(...)
}
}

如果不在 View 模型中,则可以始终
CoroutineContext(Dispatchers.IO).launch{
facebookLogin(...)
}

关于android - Kotlin Coroutines中与RXJava等效的Completable.create-Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59126730/

25 4 0