我在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)
}
它如何立即获得值?它是在运行事务之前请求整个数据库的副本还是数据库的一部分,然后在运行事务时收到请求时立即返回值?如果它请求数据库的一部分的副本,它如何在发出请求之前知道要获得哪一部分?
我到处找这个,找不到任何人解释它是如何工作的。
1条答案
按热度按时间a1o7rhls1#
它不是真正即时的,但它是同步的,并且没有预加载任何内容。事务中对
get()
的每次调用都请求根据需要获取和返回特定的文档,以便您可以在事务处理程序中处理其内容。如果网络连接速度很慢,您将更清楚地观察到延迟。尝试添加一些定时代码-您将看到它不是单一的-数位毫秒,您可以从内存中即时观察到虽然您可能希望该方法像其他读写数据库的方法一样返回一个Task,但在事务中并非如此。API假定您立即需要数据,并隐藏了执行请求的实现细节,这样您就不必担心处理这么多任务。
阅读源代码可能会对您有进一步的帮助。