gpt4 book ai didi

firebase - 使用 Kotlin Lambda 从 OnCompleteListener 返回

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

我想在 onCompleteListener 成功时获得一些返回值,但对于 Kotlin 和 lambda,我无法获得。我读了这个doc .

我正在使用这个 onCompleteListener 从 FireStore/Firebase 获取数据。

我有这个功能:

fun getRegisters() : MutableList<Register> {

mRegistersFirestoreRef.get()
.addOnCompleteListener(

OnCompleteListener { task ->

when {
task.isSuccessful -> {

val documents = task.result

var registerList : MutableList<Register> = mutableListOf()

for (document: QueryDocumentSnapshot in documents) {

registerList.add(document.toObject(Register::class.java))
}

return@OnCompleteListener registerList

}
else -> {
Log.e("Error", task.exception)
}
}
})
}

当我写作时

return@OnCompleteListener registerList

IDE 表示需要单元。

我知道我必须返回 Unit 以遵守顺序函数,因为 lambda 在 OnCompleteListener 内部,但我想返回我从 OnCompleteListener 获得的列表。

最佳答案

我没有 Firebase 环境,所以无法测试我的代码。但是,就 Kotlin 语法而言,我认为您可以将 registerList 拉出 Lambda 范围,如下所示:

fun getRegisters() : MutableList<Register> {
var registerList : MutableList<Register> = mutableListOf()
mRegistersFirestoreRef.get()
.addOnCompleteListener(
OnCompleteListener { task ->
when {
task.isSuccessful -> {
val documents = task.result
for (document: QueryDocumentSnapshot in documents) {
registerList.add(document.toObject(Register::class.java))
}
}
else -> {
Log.e("Error", task.exception)
}
}
})
return registerList
}

或使用 withapply 来“简化” var something = initial(); 的调用做某事(某事); return somethingreturn with (initial()) { doSth(this); this return initial().apply { doSth(this) } (但是,这可能稍微超出了问题范围)。

关于firebase - 使用 Kotlin Lambda 从 OnCompleteListener 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com