【问题标题】:How do I know if a transaction on Firestore succeded?我如何知道 Firestore 上的交易是否成功?
【发布时间】:2018-11-26 01:37:38
【问题描述】:

有什么方法可以知道交易是否成功?如果我上传大型档案并花费太多时间,我需要实现加载“小部件动画”。然后成功后换屏,但我不知道怎么做。

谢谢!

交易示例:

CollectionReference reference = Firestore.instance.collection("collection_example");

Firestore.instance.runTransaction((Transaction transaction) async {

await transaction.set(reference, {
  "index_1":"ABC",
  "index_2": 2,
  "index_3": {"mapIndex_1": "ABC"}
});

});

【问题讨论】:

  • runTransaction 是否返回您可以等待的未来?

标签: flutter dart transactions google-cloud-firestore


【解决方案1】:

在这种情况下,您无法从您的 runTransaction 调用中接收到它,因为它返回一个 Future<Map<String, dynamic>>我已经检查过,它总是会返回一个empty Map。因此,runTransaction 函数本身没有任何信息。

不过,您可以很容易地从您的参考资料中获得更新的Stream,看起来像这样:

DocumentReference documentReference;

firestore.runTransaction( // firestore in this case is your Firestore instance
  (Transaction transaction) async {
    // whatever you do here with your reference
    await transaction.update(
      documentReference,
      ...
);

documentReference.snapshots().listen((DocumentSnapshot event) {
  // here you could e.g. check if the transaction on your reference was succesful
});

正如你所看到的,我在 same DocumentReference 上使用了snapshots() Stream<DocumentSnapshot),因为 transaction 正在运行。 Stream 将在交易完成后立即更新并且服务器会回复您。

要了解为什么交易结果无法评估客户端检查answers on my question here

【讨论】:

  • 我遇到了一个非常相似的问题,并且发布在流上执行事务处理程序期间获得的结果是唯一的解决方法。
猜你喜欢
  • 1970-01-01
  • 2016-04-22
  • 2018-09-11
  • 2016-02-17
  • 1970-01-01
  • 2011-08-16
  • 2014-07-07
  • 2011-08-10
  • 2010-11-02
相关资源
最近更新 更多