モバイルアプリケーション(Ionic 1)でデータが破損していることがあります。PouchDB:ライブレプリケーション中に破棄されますか?
このアプリは、リモートのCouchDBサーバーにログオンしているユーザーと連携して動作しています。各ユーザーはサーバーに独自のdbを持っています。アプリ内では一度に1セッションしかありませんが、ユーザAがアプリを使用してログアウトした後、ユーザBがログインしてアプリを使用することがあります。
ローカルでは、このアプリケーションにはログイン時に作成された1つのユニークなPouchDBがあり、その後、ユーザーのリモートcouchDBとライブ同期してログアウトすると破棄されます。
問題:再現できない非常にランダムで稀なケースでは、ユーザーAのデータがユーザーBのデータに表示されます。ユーザーAの一部のデータが破棄されます(おそらくBに転送される可能性があります)。
PouchDB.destroy
ライブ同期が実行されているときに(PouchDB.replicate
とオプション{ live: true, retry:true, continuous:true }
の両方の方法でローカル:ローカルとリモートの両方のオプションで{ live: true, retry:true, continuous:true }
)呼び出すとどうなりますかと思いました。 destroy
は複製を完全に停止するために何かをしていますか?そうでない場合は、古いローカルのAデータベースから新しいローカルのBデータベースにデータが転送されている可能性があります(PouchDBのソースコードを参照しようとしましたが、失われてしまいました)。Replication.cancel
がonDestroy
メソッドが、私の場合は右のものを処理するかわからない)。
何か助けてくれてありがとう!
ユーザーがログアウトするとどうなりますか?レプリケーションを 'キャンセル 'しますか? – Phonolog
いいえ、私はしません。私はdestroy()を呼び出します(明らかにレプリケーションで呼び出された「キャンセル」を行いますが、わかりません) – bfredo123
私はレプリケーションを最初にキャンセルし、後でdbを '破棄 'しようとします。最悪のケースです:暗黙のうちに 'cancel'をもう呼び出さないと、あなたのコードは少しだけ読みやすくなりました。最良の場合:あなたの問題は解決されます;) – Phonolog