私は同様の状況に直面しました。
ライブレプリケーションを使用しているかどうかに応じて、2つの方法で解決できます。レプリケーションなし
:
- あなたはあなたのDB呼び出しのすべて、すなわち
PouchDbService
を処理するために角度サービスを作成し、痛みのそれより少なくするようにするにはdb.get()
- から
catch(err)
ハンドラをアタッチする必要があり、あなたの角度コンポーネントにコンストラクタを挿入してください
PouchDbService
には、
のようなものを含める必要があります10
db; // new PouchDB() reference
dbGet(id, opts) {
opts = opts || {};
return db.get(id, opts)
.catch(err, checkIfAuthError)
}
checkIfAuthError(err) {
if (err && err.error) {
if (err.status && (err.status === 401 || err.status === 403)) {
return navigateToLogin(); // your logout logic, i.e. simple router, or logout service
} else {
throw(err);
}
} else {
return Promise.resolve(false)
}
}
次に、あなたの角度成分(複数可)に、
PouchDbService
を注入し、独自
.then()
ロジックと
dbGet()
メソッドを呼び出します。
注:私の実装では、 401/403例外はスローされますので、まだそれらを処理したいかもしれません。ライブレプリケーションで
pouchService.dbGet('mydoc')
.then(function (result) {
// only reach here if auth succeeded
// if 401/403, service would have already executed logout logic
});
:(簡単に)
- は
replicationRef = db.replicate.from('http://remote', opts);
replicationRef.on('error', checkIfAuthError)
は、なぜあなたはこのような何かをしたいんレプリケーションの参照にエラーハンドラを追加します。 ?私の答えを読んだ? – Salman