【问题标题】:How does the Cloud Firestore Batched writes work in offline modeCloud Firestore 批量写入如何在离线模式下工作
【发布时间】:2017-11-02 11:12:01
【问题描述】:

在有关 Cloud Firestore Batched writes 的文档中,我读到“即使用户的设备处于离线状态,您也可以执行批量写入。”

这个可以关闭还是默认关闭,因为文本说“可以”。如果 Cloud Firestore 事务处于脱机状态,它将失败,我希望批量写入也这样做

我觉得我必须在OnCompleteListener 中检查结果:

batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        // offline/online?? 
    }
});

我认为Doc 应该包含对此的一些解释

【问题讨论】:

    标签: google-cloud-firestore batch-updates


    【解决方案1】:

    Firestore 事务的存在使从客户端执行原子读取-修改-写入操作成为可能。为了保证这一点,客户需要在线。

    批量写入是一种有限的事务,专门用于允许用户即使在离线时也能以全有或全无的方式更改多个文档。

    如果您不需要或不希望能够在离线时写入,只需使用常规事务:它将处理检查您是否在线,如果您离线,它将失败。您没有义务阅读交易中的任何内容。

    检查OnCompleteListener 中的批量写入结果不适用于此目的。您无法阻止该回调中的任何内容,因为只有在写入成功应用于服务器后才会调用它。

    【讨论】:

    • 谢谢,我正在从 Firebase 实时数据库迁移,在那里我使用 updateChildren() 对 10 个点头执行全有或全无。正如您建议使用 Cloud Firestore 事务,我认为一个只需要一个集合/文档,所以我必须运行 10 个事务??
    • 批量写入相当于 updateChildren 的 Firestore。您可以将 10 个更新放入一个批次中,它们将自动应用到服务器上。您的问题表明除非用户在线,否则您不想允许此操作继续进行。如果是这种情况,那么请使用事务而不是批量写入,因为它会强制执行该要求。任何一种方法都允许您一次对多个文档进行操作。
    • ok 我看到现在 Transaction 可以包含 10 个不同的文档。谢谢
    • @GilGilbert “Firestore 事务的存在使得可以从客户端执行原子读取-修改-写入操作。” -- 云函数呢?
    • @GilGilbert 在离线模式下批量写入后我必须隐藏一个按钮,当 OnCompleteListener 不能离线工作时怎么办?
    猜你喜欢
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2019-12-26
    • 1970-01-01
    • 2018-08-13
    • 2019-10-29
    相关资源
    最近更新 更多