扑扑的Firestore runTransaction引发隔离错误

时间:2019-01-23 08:40:17

标签: transactions flutter google-cloud-firestore

我把它放在颤抖的Github上,但是没有分辨率,所以我想在这里试试运气。我试图使用事务来获取多个DocumentSnapshot并随后进行更新,但它只是保持报告隔离相关的错误。

请检查以下详细信息,基本上,当您仅尝试获取/更新一个DocumentSnapshot时,它可以很好地工作,但是在多次获取/更新的情况下,事情变得很麻烦。我已经被困了好几天了。

Future<String> postOrder(List<DocumentReference> itemReferences) {
  final TransactionHandler updateTransaction = (Transaction transaction)async {
    List<DocumentSnapshot> fetchedDocs = [];
    for (int i = 0; i < itemReferences.length; i++) {
      DocumentSnapshot fetchedDoc = await transaction.get(itemReferences[i]);
      fetchedDocs.add(fetchedDoc);
    }
    for (int i = 0; i < fetchedDocs.length; i++) {
      await transaction.update(itemReferences[i], fetchedDocs[i].data);
    }
  };

  return Firestore.instance.runTransaction(updateTransaction).then((response){
    print("complete");
  });
}

我已经看到了两种错误情况,它们似乎都与异步问题有关。有人遇到过这些吗?

  1. 当第一个transaction.get()完成时,在到达下一个get()之前,第二次尝试跳入以重新运行所有内容,而前一个执行仍在进行中。我不知道这是怎么发生的。甚至发生在Firestore pub页面提供的示例代码中。

  2. 到达第一个“ await transaction.get(itemReferences [i]);”时,它会立即跳转到print(“ complete”),然后返回以继续获取另一个快照,然后进行更新,这也会引发错误。

0 个答案:

没有答案