自从开始使用DatabaseReference.runTransaction
函数以来,我遇到了问题。
观看了最新的Google Developers Flutter promotion video后,我现在有信心准确地提出这个问题了!
使用 DatabaseReference.updateData
会立即将信息传递给Stream<QuerySnapshot>
。这可以be seen here。当他点击该项目,即更新updateData
时,计数器也会立即更新,这是非常好的预期行为。 这意味着您执行更新的设备会立即更新,但另一台设备从服务器获取延迟。
转换到runTransaction
时,此功能完全丢失,您必须等待设备未处理但从Firestore发送的常规更新。 Looking at the new implementation,您可以清楚地看到延迟,并且比两个设备在同时更新更糟糕。从这一点可以清楚地得出,设备上没有 数据更新,这对UI来说非常烦人。
我没有搜索的解决方法,因为我显然已经实现了这一点,这意味着我自己管理我的更新,在这种情况下,我会在内部更新计数器在更新程序上。
我想知道的是, {{1>是否有办法启用 瞬时 行为 }}
答案 0 :(得分:2)
交易不能是即时的。他们总是需要与服务器进行往返,以确保真正正确和原子更新。
答案 1 :(得分:1)
我怀疑这是可能的,否则它不会是交易。 事务必须是ACID,因此需要在中心点(服务器)进行协调。
这就是为什么对于事务没有本地更新然后同步到服务器。