使用firestore在本地保存数据并稍后同步

时间:2018-01-31 18:29:26

标签: javascript firebase google-cloud-firestore polymer-2.x polymerfire

我正面临将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失败了。

1 个答案:

答案 0 :(得分:0)

对于Web应用程序,默认情况下不启用脱机存储。来自documentation

  

对于Web,默认情况下禁用脱机持久性。启用   持久化,调用enablePersistence方法。 Cloud Firestore的   会话之间不会自动清除缓存。因此,如果   您的Web应用程序处理敏感信息,请务必询问用户   如果他们在启用持久性之前在可信设备上。

     

重要提示:对于网络,离线持久性是一项实验性功能   只有Chrome,Safari和Firefox网络支持   浏览器。此外,如果用户打开指向的多个浏览器选项卡   相同的Cloud Firestore数据库和启用的离线持久性,   Cloud Firestore仅在第一个选项卡中正常工作。

在启用持久性之前,您所看到的是预期的行为。

相关问题