脱机启动应用程序时的数据库复制

had*_*enj 4 couchdb database-replication pouchdb

我使用PouchDB离线存储数据,并在应用程序上线时与远程CouchDB数据库同步.如果应用程序在线启动,它可以正常工作:PouchDB pause在连接中断时触发事件,并在连接恢复时继续.这是一个示例代码:

localDB.replicate.to(remoteDB, {
  live: true,
  retry: true
}).on('paused', function (info) {
  // replication was paused, usually because of a lost connection
}).on('change', function (change) {
  // yo, something changed!
}).on('active', function (info) {
  // replication was resumed
}).on('error', function (err) {
  console.log(err);
  // totally unhandled error (shouldn't happen)
})
Run Code Online (Sandbox Code Playgroud)

但是当脱机启动应用程序时,会遇到错误(Failed to load resource: net::ERR_ADDRESS_UNREACHABLE)

无法访问远程数据库,PouchDB触发error事件("Database encountered an unknown error"状态500).即使连接回来,复制也行不通.

问题: 即使应用程序是脱机启动的,也有办法使复制工作(例如,pause即使没有访问远程数据库,事件也会先发生)?

更新: 感谢nlawson的回答!我只需要在函数中添加远程数据库创建以使其工作:

function retryReplication() {
  var remoteDB = new PouchDB('http://129.199.80.62:5984/remotedb');
  localDB.replicate.to(remoteDB, {
  live: true,
  }).on('paused', function (info) {
    // replication was paused, usually because of a lost connection
  }).on('change', function (change) {
    // yo, something changed!
  }).on('active', function (info) {
    // replication was resumed
  }).on('error', function (err) {
    setTimeout(retryReplication, 5000);
    // totally unhandled error (shouldn't happen)
  });
};
Run Code Online (Sandbox Code Playgroud)

nla*_*son 8

这应该是关于Github的错误报告,而不是StackOverflow上的问题.:)我在这里提交了.

retry它无论是在离线或在线模式开始复制一定要不顾工作.对不起你遇到了这个bug!

在此期间,您可以避免该retry选项并自行重试复制.您可以在此处找到有关如何执行此操作的说明.

更新:此错误已在PouchDB 3.6.0中修复.