Firebase 是否可以从函数返回Firestore数据?

Firebase 是否可以从函数返回Firestore数据?,firebase,kotlin,google-cloud-firestore,Firebase,Kotlin,Google Cloud Firestore,在中,从Firestore检索数据: val docRef = db.collection("cities").document("BJ") docRef.get().addOnSuccessListener { documentSnapshot -> val city = documentSnapshot.toObject<City>() } val docRef=db.集合(“城市”)文档(“BJ”) docRef.get().addOnSuccessListen

在中,从Firestore检索数据:

val docRef = db.collection("cities").document("BJ")
docRef.get().addOnSuccessListener { documentSnapshot ->
    val city = documentSnapshot.toObject<City>()
}
val docRef=db.集合(“城市”)文档(“BJ”)
docRef.get().addOnSuccessListener{documentSnapshot->
val city=documentSnapshot.toObject()
}
我怎样才能把它转换成一个函数,返回一个城市对象?大概是这样的:

fun getCity(): City?{
   val docRef = db.collection("cities").document("BJ")
   docRef.get().addOnSuccessListener { documentSnapshot ->
       val city = documentSnapshot.toObject<City>()
       return city
}
fun getCity():城市{
val docRef=数据库集合(“城市”)文档(“BJ”)
docRef.get().addOnSuccessListener{documentSnapshot->
val city=documentSnapshot.toObject()
返回城市
}

调用getCity()函数时,我是否可以“等待”结果?

您需要知道一件重要的事情:

所有Firestore API都是异步的。它们会立即返回,您必须使用回调来获取结果。无法保证何时调用回调,必须异步处理回调。您的
getCity()
函数将无法立即返回对象

get()
返回一个表示异步查询的任务对象(由提供)。如果要
wait()
结果,最简单的方法是使用库将该任务转换为可以等待的
suspend fun
。如果这样做,您的
getCity()
还应该是一个
suspend fun
,这样它就可以将结果异步地传递给调用方


另请参见:

您需要知道一件重要的事情:

所有Firestore API都是异步的。它们会立即返回,您必须使用回调来获取结果。无法保证何时调用回调,必须异步处理回调。您的
getCity()
函数将无法立即返回对象

get()
返回一个表示异步查询的任务对象(由提供)。如果要
wait()
结果,最简单的方法是使用库将该任务转换为可以等待的
suspend fun
。如果这样做,您的
getCity()
还应该是一个
suspend fun
,这样它就可以将结果异步地传递给调用方

另见: