【发布时间】:2019-06-26 15:23:58
【问题描述】:
我用远程数据库编写了 pouchdb 同步(在 Angular 应用程序中),远程数据库将远程更改发送到应用程序。
我根据 PouchDb 文档了解到,本地 IndexedDb 和远程服务器之间的数据应该通过 PouchDb.sync 同步。之后,它将由第二个客户获得。
这是我用于同步的代码:
export const appDataDbSyncArgs: IDbSyncArguments = {
localDbName: "app_data",
remoteDbUrl: "http://localhost:4984/app_data",
syncOptions: {
live: true,
retry: true,
since: 0,
batch_size: 1,
batches_limit: 1
}
};
PouchDB.replicate(remoteDbUrl, localDbName)
.on("active", () => {
console.log("replication is active");
const replicationStartedMessage = applyMessageType({}, replicationStarted);
messenger.postMessage(replicationStartedMessage);
})
.on("complete", info => {
console.log("%cReplication has been completed.", "color: lightgreen; font-size: 20px;");
const replicationCompleteMessage = applyMessageType(info, replicationComplete);
messenger.postMessage(replicationCompleteMessage);
PouchDB.sync(localDbName, remoteDbUrl, syncOptions)
.on("change", changeInfo => {
console.log("%cSync changes", "color: green; font-size: 20px;");
const changesInfoMessage = applyMessageType(changeInfo, syncChanges);
messenger.postMessage(changesInfoMessage);
})
.on("error", err => {
console.log("sync error", err);
const errorMessage = applyMessageType(err, syncError);
messenger.postMessage(errorMessage);
})
.on("paused", err => {
console.log("sync error (paused)", err);
})
.on("active", () => {
console.log("sync active");
})
.on("denied", err => {
console.log("sync error (denied)", err);
})
.on("complete", info => {
console.log("sync complete", info);
});
})
.on("error", err => {
console.log("replication error", err);
const replicationErrorMessage = applyMessageType(err, replicationError);
messenger.postMessage(replicationErrorMessage);
});
这是我用来保存数据的代码:
protected _addDocument<T> (id: string, document: PutDocument<{} & T>): Observable<Response> {
document['_id'] = id;
//document._rev = null;
return fromPromise(this._db.put<T>(document))
.pipe(
take(1)
);
}
// Where this._db = new PouchDB(localDbName);
它会立即将数据保存到 IndexedDb,但不会将其保存在远程数据库中。有时数据会在 5-10 分钟或更长时间后到达远程数据库。有时立即。但是,如果数据来自远程数据库,或者我更改远程服务器中的数据,pouchDb 会触发“onChange”事件,第二个客户端会在应用程序中获取它。
但我需要将保存在 IndexedDb 中的数据立即保存在远程数据库中。
【问题讨论】:
标签: pouchdb