firebase - 是否可以从函数返回 Firestore 数据?
问题描述
在此代码段中,从 Firestore 检索数据:
val docRef = db.collection("cities").document("BJ")
docRef.get().addOnSuccessListener { documentSnapshot ->
val city = documentSnapshot.toObject<City>()
}
我怎么能把它变成一个函数,返回一个城市对象?像这样的东西:
fun getCity(): City?{
val docRef = db.collection("cities").document("BJ")
docRef.get().addOnSuccessListener { documentSnapshot ->
val city = documentSnapshot.toObject<City>()
return city
}
当我调用getCity()函数时,我能以某种方式“等待”结果吗?
解决方案
您需要知道一件重要的事情:
所有 Firestore API 都是异步的。它们立即返回,您必须使用回调来获取结果。无法保证何时调用回调,必须异步处理。 您的getCity()
函数将无法立即返回对象。
get()
返回一个代表异步查询的 Task 对象(由Play 服务 Task API 提供)。如果您想await()
获得结果,最简单的方法是使用kotlinx-coroutines-play-services库将该任务转换为suspend fun
可以等待的任务。如果你这样做,你getCity()
也应该是 asuspend fun
以便它可以将结果异步传递给它的调用者。
推荐阅读
- c# - 如何从 OWIN 中的 ./well-known/openid-connect URL 获取 OpenId 连接配置?
- reactjs - redux 不会立即更新 props
- python-3.x - python打字是否支持多种类型?
- clojurescript - 渲染试剂/重构中的两个组件
- azure - 就使用 azure 日志分析的本地服务器警报提供建议
- android - 如何修复 Firestore 崩溃中的内部错误
- python - 如何在 Conda 中正确安装我自己的本地开发包?
- mysql - MySQL - 将所有存储过程从一个模式复制到另一个模式
- python-3.x - 用python计算excel列中的元素
- java - 如何让 JQuery 解析信息并在每次点击时进行评估