【问题标题】:Cloud Functions and Firestore: Using Promise.all() to track multiple documetn modificationsCloud Functions 和 Firestore:使用 Promise.all() 跟踪多个文档修改
【发布时间】:2020-12-24 13:51:01
【问题描述】:

我使用可调用的 Cloud 函数来创建新用户。对于此用户,会在 Cloud Firestore 中创建多个文档。

我不想只存储部分数据,如果一个承诺(文档创建失败),但完全撤消注册,所以我使用Promise.all(documentCreationPromisses)

所以我的问题是,尽管我使用 Promise.all() 是否仍有可能创建某些文档而其他文档不创建?

【问题讨论】:

  • 是的,因为您仍然可以一次创建所有这些。如果其中一个操作失败,Promise.all 将返回一个被拒绝的承诺,但这不会改变所有操作都被执行(成功与否)的事实。最好改用allSettled,然后你会检查它们是否都成功 - 如果没有,你会去删除成功上传的文档,以撤消部分上传。 (在失败的Promise.all 上这样做是不够的,因为您可能会在其他一些文档完成上传之前收到错误。)

标签: javascript firebase google-cloud-firestore promise google-cloud-functions


【解决方案1】:

Promise.all() 返回一个承诺,告诉您是否所有其他承诺都成功了,或者其中任何一个失败了。它当然可以通过部分成功来解决,如果有失败,您必须检查每个单独的 promise 以找出哪些成功或失败。

如果您在 Firestore 中修改一堆文档,并且您要求所有修改要么完全成功,否则什么也不会发生(完全回滚),那么您应该使用 batch write or transaction。对于批量写入和事务,一切都必须成功,否则整个批次都会失败。从该批次返回的单个承诺将告诉您发生了什么。

【讨论】:

    猜你喜欢
    • 2021-03-16
    • 2021-05-26
    • 2018-05-08
    • 2023-03-29
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2018-03-16
    相关资源
    最近更新 更多