4

我正在开发一个使用 PouchDB 作为本地数据库和 CouchDB 作为中央数据库的 web 应用程序。我使用 PouchDB 的原因之一是我想在我的应用程序中利用离线支持。但是,我遇到了一个小问题。下线再上线时,PouchDB 不再同步。我必须刷新浏览器才能让它再次开始同步。一种解决方案是,即使应用程序处于脱机状态,PouchDB 也会继续轮询远程数据库,即使处于脱机状态,这将导致当它再次联机时,同步将再次启动。另一种解决方案是让用户手动告诉应用程序它再次在线并从那里获取同步。

我如何告诉 PouchDB 重新开始同步?如果我能做到这一点,我可以解决我的问题。

4

4 回答 4

2

PouchDB 3.1.0 实现retry了用于复制 API 的选项。

https://github.com/pouchdb/pouchdb/commit/47d105edaa9e36006124636235be8016c2e8c52c

PouchDB.replicate.sync('http://remote', {
    live: true,
    retry: true
})
于 2014-12-03T23:56:58.610 回答
1

我刚刚发布了pouchdb-persist,一个用于持久复制的插件。有了这个插件,你就可以做到

var db = new PouchDB('todos');

// Instead of db.replicate()
var persist = db.persist({ url: 'http://localhost:5984/todos' });

您还可以侦听connectdisconnect事件。

于 2014-10-10T05:46:06.617 回答
1

PouchDB 的目标是使用功能奇偶校验来镜像 CouchDB,CouchDB 复制的一个功能是,如果它处于脱机状态,它将在一段时间后超时,因此这需要您重新开始复制​​,正如您所指出的那样。

关于无限复制有一个未解决的问题(https://github.com/pouchdb/pouchdb/issues/966),所以这不是问题,但在此之前,您可以使用用于启动复制的相同复制调用第一名:

db.replicate.to(remoteDB, [options]);

http://pouchdb.com/api.html#replication

一种选择是尝试类似http://github.hubspot.com/offline/docs/welcome/但希望我们可以将此功能添加到 PouchDB。

于 2014-04-18T11:25:44.823 回答
1

我的技巧是在出现错误时重新启动复制:

var retryMs = 2000;
function replicateFrom() {
  var opts = {live: true};
  db.replicate.from(remoteCouch, opts).on('error', function() {
    console.log('replication error');
    setTimeout(replicateFrom, retryMs);
  });
}

同样可以用db.replicate.to

于 2014-07-22T22:50:41.457 回答