首先,我是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)
});
抱歉我的英语不好。
答案 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);