Pouchdb - 如何显示同步进度状态?

时间:2016-11-29 04:20:47

标签: couchdb ionic2 pouchdb

首先,我是pouchdb的新手。我想要做的是我想向用户显示同步进度状态。我有localdb和remotedb。目前我只能显示已经通过控制台同步的项目。但问题是,我需要向用户显示。例如,如果remotedb中的数据是1000,我想显示同步状态进度,如4/1000,并将增加到1000/1000。以下是我的代码。

//declaration counter    
let counter:number = 0;

this.db = new PouchDB('users');  //localdb

this.remote = http://localhost:5984/users;   //remotedb

let options = {
    live: true,
    retry: true,
    continuous: true
};

this.db.sync(this.remote, options)
  .on('change', function(change){
    counter++;  //to count how many data is sync
console.log('Data sync', counter);
    console.log('Users provider change!', change);
  })
  .on('paused', function(info){
    console.log('Users provider paused!', info);
  })
  .on('active', function(info){
    console.log('Users provider active!', info);
  })
  .on('error', function(err){
    console.log('users provider error!', err)
  });

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:2)

使用CouchDB,您可以简单地使用活动任务endpoint

对于CouchDB,您需要使用复制的db.info()和onChange事件。

首先,正如我所评论的那样,删除复制中的连续选项。无论如何,您的复制将是无限的。在您的情况下,您需要单次复制。

要计算进度,您需要计算onChange响应中的序列数。将序列号除以远程数据库的序列数,你应该有一个非常准确的进度。

看看这个example,它可能会帮助您找到计算进度的方法。

答案 1 :(得分:0)

我有一个应用程序,我首先设置一次性复制,将整个远程CouchDB数据库复制到本地PouchDB,然后设置连续复制。

首先我计算远程文件的数量:

let doc_count = 0;
this.remoteDB.info()
  .then((infos:any) => {
    doc_count = infos.doc_count;
  }).catch((error) => {
    console.error(error);
});

然后我使用setInterval:

计算本地文档数
let interval = setInterval(() => {
  this.pouchBase.info()
    .then((infos: any) => {
      let count = doc_count ? Math.round((infos.doc_count / doc_count) * 100) : 0;
      if (infos && infos.doc_count === doc_count) {
          clearInterval(interval);
      }
      // do something with doc_count and count
    });
 });
}, 500);