我一直在测试和阅读,但无法正确理解。
我读到文档的元数据更改不会触发快照监听器事件,因此无法检查正在获取的文档是否来自缓存。 (否则可以通过 (documentSnapshot?.metadata.isFromCache)!
)
我的问题取决于以下内容。用户在 View Controller A 中按下按钮后,我将数据设置为 Firestore 中的文档(我创建了一个具有随机 ID 的新文档并将 ID 存储在 View Controller A 的变量中)并直接转到 View Controller B。在 View 中 Controller B,我想等待确认我的数据在服务器中。
因此,我使用存储在 ViewController A 中的 ID 查询它(我在 prepareForSegue:
中将其传递给 ViewController B)并检索文档的数据,特别是 status
字段。
我想有两种情况:
1) 显示事件指标。如果在 20 秒之类的一段时间后没有文档,则向用户显示错误屏幕以处理它(就像重试的按钮)
2) 显示事件指示器。文件被取回。停止事件指示器并正常进行。
问题是它总是进入第二种情况,因为 Firebase 首先从本地数据库获取。 在这种情况下,如何确保我只监听来自服务器的更改?
最佳答案
您可以在查询中使用选项 includeDocumentMetadataChanges 并使用属性 hasPendingWrites 进行 if 语句以仅获取服务器上的数据。
下面是一个示例,其中我只使用已写入服务器的数据更新用户数组。
this.db.collection('users')
.onSnapshot({ includeDocumentMetadataChanges: true }, function (doc) {
var result = [];
doc.docs.forEach(element => {
if (!element.metadata.hasPendingWrites) {
result.push(element.data())
}
});
return result;
});
关于ios - Firebase - 观察文档更改 - 如何知道它们何时来自服务器(完成)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48122830/