将 Firebase Firestore 和 Firebase Storage 一起调用成一个批次?

Posted

技术标签:

【中文标题】将 Firebase Firestore 和 Firebase Storage 一起调用成一个批次?【英文标题】:Couple Firebase Firestore and Firebase Storage calls together into a batch? 【发布时间】:2018-05-24 06:18:02 【问题描述】:

我正在寻找有关 Firebase Storage 和 Firebase Firestore 组合/批量调用的最佳做法。例如:我需要从我的 Firestore 中删除一个与 Firebase Storage 中的图像相关的文档。 是否有可能以这样一种方式执行此操作,即当其中一个操作失败时,整个事务都将被还原?

【问题讨论】:

【参考方案1】:

没有真正的atomic/transactional 方法可以做到这一点,但是您可以使用云功能可靠地实现它。

您可以删除一个文档,并使用onDelete触发器删除存储中的实际文件。

因此,当您无法删除文档时,该文件不会发生任何事情。如果删除文件成功,会触发云端功能删除图片。

【讨论】:

致 2021 年阅读此文的任何人...这并不能保证图片已被删除。如果云功能删除图片失败,则说明您删除了文档,但没有删除图片。目标是让两个动作一起失败/成功。这并不能实现该目标。【参考方案2】:

Firebase 产品均不支持此类跨产品事务更新。您必须在更新期间嵌套调用,并使用可以在读取期间处理意外数据结构的代码。

另见:

How to write denormalized data in Firebase 了解更新的一般方法(此处并非全部适用)。 Firebase handle sudden loss in connection 关于存储和实时数据库之间的跨产品一致性

【讨论】:

以上是关于将 Firebase Firestore 和 Firebase Storage 一起调用成一个批次?的主要内容,如果未能解决你的问题,请参考以下文章

Android中的Firebase:firestore是未解决的参考

在创建用户时将数据写入 Firestore 不起作用

如何自定义firebase DocumentData 接口?

firebase firestore 在事务中添加新文档-transaction.add 不是函数

如何在 iOS XCUITest 期间配置 Firebase

将 Firebase Firestore 和 Firebase Storage 一起调用成一个批次?