Firestore事务失败,并显示"Transaction failed all retries"

Dun*_*nes 7 transactions firebase flutter google-cloud-firestore

我正在运行一个非常简单的Firestore事务,它会在写入之前检查文档是否存在,如果没有.

(用例是注册用户名 - 如果尚未注册,则当前用户可以获取用户名)

这是相关Flutter代码的片段:

DocumentReference usernameDocRef =
    Firestore.instance.collection(_USERNAMES).document(username);

await Firestore.instance.runTransaction((transaction) async {
  var snapshot = await transaction.get(usernameDocRef);
  if (!snapshot.exists) {
    transaction.set(usernameDocRef, {
      _UsernamesKey.userid: _user.id,
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

这是因为"事务失败所有重试"异常而失败.

根据Firestore文档,可能会出现故障,原因有两个:

  • 该事务包含写操作后的读操作.在任何写操作之前必须始终进行读操作.
  • 该事务读取在事务之外修改的文档.在这种情况下,事务会自动再次运行.该事务重试次数有限.

我不认为我会触发其中任何一个.有什么建议?

Dun*_*nes 0

最近已修复此问题 - https://github.com/flutter/plugins/pull/1206。

如果您使用的是主通道,则修复程序应该已经可用。对于其他频道(开发版、测试版、稳定版)YMMV。