【问题标题】:Flutter Firestore transaction running multiple timesFlutter Firestore 事务多次运行
【发布时间】:2019-03-13 10:36:29
【问题描述】:

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;
});

事务可能会运行多次,但总是在第一个事务之后返回。现在在并发编辑的情况下,第一笔交易数据可能不正确,所以这对我来说是个问题。

如何等待事务实际完成,即使它会运行多次并且在第一个完成后不返回?

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    您的交易代码没有任何意义。它没有获取任何文档的内容。如果您打算读取、修改和写入至少一个文档,则只需要使用事务。

    事务函数可能只运行一次。如果服务器发现文档上发生了许多其他事务,并且无法跟上所有事务,则只需要运行多次。

    【讨论】:

    • 这是我的交易,我只是没有添加它,因为我认为它在这种情况下无关紧要。 ` final TransactionHandler transaction = (Transaction tx) async { DocumentSnapshot ds = await tx.get(userAccountsCollection.document(id));返回 ds.data; }; `
    • 请使用所有相关代码编辑您的问题。不要将其粘贴到难以阅读的评论中。
    • 我的答案是正确的。您只是在阅读文档,而不是在编写文档。在这种情况下,事务仍然不是必需的,并且该函数只会运行一次,因为不可能发生需要多次执行的争用。
    • 我明白了。谢谢
    猜你喜欢
    • 2021-09-28
    • 2019-10-06
    • 2022-12-16
    • 2020-08-05
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多