Firebase Flatter Firestore事务多次运行

Firebase Flatter Firestore事务多次运行,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,Firestore文档说明: 在并发编辑的情况下,Cloud Firestore将再次运行整个事务。例如,如果一个事务读取文档,而另一个客户端修改了其中任何一个文档,则Cloud Firestore将重试该事务。此功能确保事务在最新和一致的数据上运行 我正在使用cloud_firestore软件包,我注意到 final TransactionHandler transaction = (Transaction tx) async { DocumentSnapshot ds = await t

Firestore文档说明:

在并发编辑的情况下,Cloud Firestore将再次运行整个事务。例如,如果一个事务读取文档,而另一个客户端修改了其中任何一个文档,则Cloud Firestore将重试该事务。此功能确保事务在最新和一致的数据上运行

我正在使用cloud_firestore软件包,我注意到

final TransactionHandler transaction = (Transaction tx) async {
  DocumentSnapshot ds = await tx.get(userAccountsCollection.document(id));
  return ds.data;
};
return await runTransaction(transaction).then((data){
    return data;
});
事务可以运行多次,但总是在第一次事务之后返回。现在在并发编辑的情况下,第一个事务数据可能不正确,所以这对我来说是个问题


即使事务将运行多次并且在第一个事务完成后不返回,我怎么能等待事务真正完成呢?

您的事务代码没有任何意义。它没有得到任何文件的内容。仅当您打算读取、修改和写入至少一个文档时,才需要使用事务


无论如何,事务函数只能运行一次。只有当服务器发现文档上发生了大量其他事务,并且无法跟上所有事务时,才需要多次运行它。

这是我的事务,我只是没有添加它,因为我认为它与本例无关。`final TransactionHandler transaction=transaction tx async{DocumentSnapshot ds=await tx.getuserAccountsCollection.documentid;返回ds.data;}`请用所有相关代码编辑您的问题。不要把它粘贴到难以阅读的评论中。我的答案是正确的。你只是在读文件,而不是在写。在这种情况下,事务仍然是不必要的,函数只运行一次,因为不可能发生需要多次执行的争用。我理解。非常感谢。