kotlin firebase事务上的get操作如何立即返回结果

ryevplcw  于 2022-11-30  发布在  Kotlin
关注(0)|答案(1)|浏览(131)

我在Android上玩Firebase事务已经有一段时间了,这个想法在我的脑海中闪过。当你运行一个像这样的事务时,变量data会通过对transaction. get()的同步调用被立即赋值:

val db = Firebase.firestore
db.runTransaction { transaction ->
    val ref = db.collection("example").document("exampledoc")
    val ref2 = db.collection("example").document("exampledoc2")

    val data = transaction.get(ref)
    val data2 = transaction.get(ref2)
}

它如何立即获得值?它是在运行事务之前请求整个数据库的副本还是数据库的一部分,然后在运行事务时收到请求时立即返回值?如果它请求数据库的一部分的副本,它如何在发出请求之前知道要获得哪一部分?
我到处找这个,找不到任何人解释它是如何工作的。

a1o7rhls

a1o7rhls1#

它不是真正即时的,但它是同步的,并且没有预加载任何内容。事务中对get()的每次调用都请求根据需要获取和返回特定的文档,以便您可以在事务处理程序中处理其内容。如果网络连接速度很慢,您将更清楚地观察到延迟。尝试添加一些定时代码-您将看到它不是单一的-数位毫秒,您可以从内存中即时观察到
虽然您可能希望该方法像其他读写数据库的方法一样返回一个Task,但在事务中并非如此。API假定您立即需要数据,并隐藏了执行请求的实现细节,这样您就不必担心处理这么多任务。
阅读源代码可能会对您有进一步的帮助。

相关问题