【问题标题】:Is it possible to check whether there is unsynced data that has yet to be synced to Firestorage?是否可以检查是否有尚未同步到 Firestorage 的未同步数据?
【发布时间】:2018-10-05 14:02:50
【问题描述】:

我正在使用 Google Firestorage 构建一个 react-native android 应用程序。该应用程序的用例可能如下:

用户在设备离线时将数据添加到数据库。一段时间后,用户将他的设备连接到互联网,离线数据会自动同步到 Firestore。到现在为止还挺好。但在他这样做之前,我想显示一条类似“仍有未同步的数据。请将您的设备连接到互联网以进行同步”的文本。

所以我的问题是:是否可以检查 Firestores 离线队列中是否还有尚未同步到在线数据库的数据?

类似

// Device is still offline
if (firestore.offlineQueue.length > 0) {
    alert('Hey, you´ve got unsynced data! Please connect your Device to the Internet.');
}

干杯!

【问题讨论】:

  • 你试过var source = snapshot.metadata.fromCache ? "local cache" : "server";吗?
  • 感谢您的评论!我玩了一下,但它不是只在firestore尝试将数据写入数据库时​​触发吗?我想我可以检查每个查询是否fromCache === true,如果是,请存储dataInOfflineQueue = true 之类的内容并采取相应措施。但是当离线队列中的数据被同步时是否还有一个事件,所以我知道何时将dataInOfflineQueue 设置回 false?像 `addEventListener('offlineQueueSyncFinished', ...) 之类的东西?

标签: google-cloud-firestore react-native-android


【解决方案1】:

要解决这个问题,我建议您使用以下代码行:

var source = snapshot.metadata.fromCache ? "local cache" : "server";

它不只是在 Firestore 尝试将数据写入数据库时​​触发吗?

不,它只会帮助您在读取时检查您是否从服务器或缓存接收数据,而不是在写入数据时。是的,您可以在查询时检查数据的来源并采取相应措施。

但是离线队列中的数据同步时是否也有事件?

是的。如果你附加一个完整的 lisner,这就是它的作用。请注意,如果您的设备无法访问 Firestore 后端,则不会调用成功侦听器和失败侦听器。成功/失败侦听器将在数据提交到 Firebase 服务器或被 Firebase 服务器拒绝后被调用。

【讨论】:

  • 嗨马克西米利安!你有没有试过我上面的解决方案,它有效吗?
  • 嗨,亚历克斯,是的,它为我指明了正确的方向。非常感谢!
  • 对于任何感兴趣的人,我使用hasPendingWrites 而不是fromCache 参数来检查管道中是否存在未写入的写入。它真的很棒!
  • @MaximilianSchmidt 一直在寻找完全相同的东西,您最终将听众附在哪里?您找到订阅全局 Firestore 快照的方法了吗?那么只需检查其中一个快照是否有 PendingWrites?
  • @ClayColeman 我在componentDidMount 上的App.js 中连接到我的数据库,然后将this.database.onSnapshot({includeMetadata: true}, response => {...}) 与react natives NetInfo 模块结合使用。请查看附上的代码,如果有不清楚的地方,请随时询问:gist.github.com/maximilianschmidt/…
猜你喜欢
  • 2020-03-27
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多