我正面临将google firestore的离线行为整合到我的聚合物应用程序中的问题。
我创建了一个元素来使用firestore执行所有数据库操作。我已经在构造函数中初始化了连接,下面是代码。
constructor() {
super();
if (!this.db) {
firebase.firestore().enablePersistence()
.then(() => {
this.db = firebase.firestore();
})
.catch((err) => {
if (err.code == 'failed-precondition') {
} else if (err.code == 'unimplemented') {
}
});
}
}
我创建了另一个将用户详细信息保存到firestore的函数。
saveUserAndSync() {
this.db.collection("users").add(this.userObj)
.then(function (docRef) {
console.log("Document written with ID: ", docRef.id);
})
.catch(function (error) {
console.error("Error adding document: ", error);
});
}
即使离线也很好用。我面临的最大问题是,如果应用程序处于脱机状态并且我创建了用户,同时如果我重新加载页面,则所有数据都将丢失,并且与firestore的同步将无法正常工作。
任何人都可以建议解决这个问题。
我能够使用pouchDB和couchDB执行相同的实现,因为pouchDB api将首先在本地保存数据,然后将其与couchDB同步。
但是使用firestore失败了。
答案 0 :(得分:0)
对于Web应用程序,默认情况下不启用脱机存储。来自documentation:
对于Web,默认情况下禁用脱机持久性。启用 持久化,调用enablePersistence方法。 Cloud Firestore的 会话之间不会自动清除缓存。因此,如果 您的Web应用程序处理敏感信息,请务必询问用户 如果他们在启用持久性之前在可信设备上。
重要提示:对于网络,离线持久性是一项实验性功能 只有Chrome,Safari和Firefox网络支持 浏览器。此外,如果用户打开指向的多个浏览器选项卡 相同的Cloud Firestore数据库和启用的离线持久性, Cloud Firestore仅在第一个选项卡中正常工作。
在启用持久性之前,您所看到的是预期的行为。