【问题标题】:How to avoid triggering Firestore onSnapshot updates for hasPendingWrites = true?如何避免为 hasPendingWrites = true 触发 Firestore onSnapshot 更新?
【发布时间】:2021-03-14 08:45:26
【问题描述】:

我只想触发我的onSnapshot() 侦听器以获取docSnapshot.metadata.hasPendingWrites = false 的更新。

在 Firestore official docs 上,我们得到以下信息:

本地更改事件

应用中的本地写入将立即调用快照侦听器。这是因为一个称为“延迟补偿”的重要功能。当您执行写入时,您的侦听器将在数据发送到后端之前收到新数据的通知。

检索到的文档具有metadata.hasPendingWrites 属性,该属性指示文档是否具有尚未写入后端的本地更改。您可以使用此属性来确定快照侦听器接收到的事件来源:

db.collection("cities").doc("SF")
.onSnapshot(function(doc) {
  var source = doc.metadata.hasPendingWrites ? "Local" : "Server";
  console.log(source, " data: ", doc.data());
});

是否可以完全避免更新,或者我应该只检查hasPendingWrites 属性?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    你无法避免回调。您需要检查代码中的hasPendingWrites 以确定是否要在回调中执行任何操作。

    回调总是针对本地未提交的写入触发的原因是因为开发人员通常希望尽快保持他们的 UI 与待处理的文档更改保持同步,假设它们将被写入。如果您不是这种情况,您将需要使用该属性来根据文档的状态确定用户应该在您自己的 UI 中看到的内容。

    【讨论】:

    • 很遗憾回调没有触发两次,一次是hasPendingWrites=true,一次是false,有没有简单的方法来实现这个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多