PouchDB:进行实时复制时销毁干净吗?
PouchDB: is a destroy clean while doing live replication?
在极少数情况下,我的移动应用程序 (Ionic 1) 中出现数据损坏。
该应用程序正在与登录到远程 CouchDB 服务器的用户一起使用。每个用户在服务器中都有自己的数据库。应用程序中一次只有一个会话,但可能会发生用户 A 使用该应用程序,注销,然后用户 B 登录并使用该应用程序的情况。
在本地,应用程序有一个唯一的 PouchDB,它在登录时创建,然后与用户的远程 couchDB 实时同步,然后在注销时销毁。
问题:在我无法重现的非常随机和罕见的情况下,用户A的某些数据出现在用户B的数据中!而且,用户A的一些数据被破坏了(可能转移给了B,不确定)。
所以,我想知道如果我在实时同步为 运行 时调用 PouchDB.destroy
会发生什么情况(PouchDB.replicate
带有两种方式的选项 { live: true, retry:true, continuous:true }
:本地到远程远程到本地)。 destroy
是否正在做一些事情来完全停止复制?如果不是,它可能解释了一些数据从旧本地 A 数据库传输到新本地 B 数据库(我试图浏览 PouchDB 源代码但在其中迷路了。我只能看到 Replication.cancel
是从它的 onDestroy
方法调用,但不确定它是否适合我的情况。
非常感谢您的帮助!
在复制期间销毁数据库的最安全方法是先调用 cancel()
,然后等待 complete
事件。例如:
var sync = db.sync(otherDB, {live: true, retry: true});
sync.on('complete', function () {
db.destroy().then(/* ... */);
});
/* ... */
sync.cancel(); // will trigger a 'complete'
希望对您有所帮助!
在极少数情况下,我的移动应用程序 (Ionic 1) 中出现数据损坏。
该应用程序正在与登录到远程 CouchDB 服务器的用户一起使用。每个用户在服务器中都有自己的数据库。应用程序中一次只有一个会话,但可能会发生用户 A 使用该应用程序,注销,然后用户 B 登录并使用该应用程序的情况。
在本地,应用程序有一个唯一的 PouchDB,它在登录时创建,然后与用户的远程 couchDB 实时同步,然后在注销时销毁。
问题:在我无法重现的非常随机和罕见的情况下,用户A的某些数据出现在用户B的数据中!而且,用户A的一些数据被破坏了(可能转移给了B,不确定)。
所以,我想知道如果我在实时同步为 运行 时调用 PouchDB.destroy
会发生什么情况(PouchDB.replicate
带有两种方式的选项 { live: true, retry:true, continuous:true }
:本地到远程远程到本地)。 destroy
是否正在做一些事情来完全停止复制?如果不是,它可能解释了一些数据从旧本地 A 数据库传输到新本地 B 数据库(我试图浏览 PouchDB 源代码但在其中迷路了。我只能看到 Replication.cancel
是从它的 onDestroy
方法调用,但不确定它是否适合我的情况。
非常感谢您的帮助!
在复制期间销毁数据库的最安全方法是先调用 cancel()
,然后等待 complete
事件。例如:
var sync = db.sync(otherDB, {live: true, retry: true});
sync.on('complete', function () {
db.destroy().then(/* ... */);
});
/* ... */
sync.cancel(); // will trigger a 'complete'
希望对您有所帮助!