我使用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)
})
但是当离线启动应用程序时,会遇到错误(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)
});
};
答案 0 :(得分:8)
这应该是关于Github的错误报告而不是StackOverflow上的问题。 :)我filed it here。
retry
复制绝对可以正常工作,无论它是以脱机还是在线模式启动。对不起,你遇到了这个错误!
与此同时,您可以避免使用retry
选项并自行重试复制。您可以找到a description of how to do that here。
更新:此错误已在PouchDB 3.6.0中修复。