2016-11-29 25 views
1

まず、私はpouchdbを初めて使っています。私がしたいのは、同期の進行状況をユーザーに表示したいのです。私はlocaldbとremotedbを持っています。現在のところ、すでにコンソールでのみ同期しているアイテムのみを表示できます。しかし、問題は、私はユーザーに表示する必要があります。たとえば、remotedbのデータが1000の場合、4/1000のような同期ステータスの進行状況を表示し、1000/1000まで増加します。以下は私のコードです。Pouchdb - 同期の進行状況を表示する方法は?

//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を見ると、進行状況を計算する方法を見つけるのに役立ちます。

+0

ありがとうございます。やってみます。 – Akmal

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); 
関連する問題