PouchDB:在进行实时复制时是一种破坏清除吗?

时间:2016-12-25 11:32:09

标签: ionic-framework synchronization pouchdb destroy

我的移动应用程序(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方法调用,但不确定它是否适合我的情况。)

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

在复制过程中销毁数据库的最安全方法是先调用cancel(),然后等待complete事件。例如:

var sync = db.sync(otherDB, {live: true, retry: true});
sync.on('complete', function () {
  db.destroy().then(/* ... */);
});
/* ... */
sync.cancel(); // will trigger a 'complete'

希望有所帮助!