Couchdb 地方冲突
有时,我会得到一些大致如下的信息: 409(冲突) 标题响应为:Couchdb 地方冲突,couchdb,pouchdb,Couchdb,Pouchdb,有时,我会得到一些大致如下的信息: 409(冲突) 标题响应为:{“error”:“conflict”,“reason”:“Document update conflict.”} 请求有效负载为: { "_id": "_local/f.kaEuoL4i41KgUTkCHAyg==", "_rev": "0-10", "session_id": "735AF8E9-BF62-191F-9A63-760C922E1259", "history": [{
{“error”:“conflict”,“reason”:“Document update conflict.”}
请求有效负载为:
{
"_id": "_local/f.kaEuoL4i41KgUTkCHAyg==",
"_rev": "0-10",
"session_id": "735AF8E9-BF62-191F-9A63-760C922E1259",
"history": [{
"last_seq": 77,
"session_id": "735AF8E9-BF62-191F-9A63-760C922E1259"
},
{
"last_seq": 67,
"session_id": "908B46C9-06C4-A60D-9189-CCE33ECEB252"
},
{
"last_seq": 59,
"session_id": "7B7A1737-D6AB-23F2-B3C3-954DFAC3F91A"
},
{
"last_seq": 52,
"session_id": "A7B639E5-CCEF-E1DE-91B2-8E27AB4AFB5B"
},
{
"last_seq": 45,
"session_id": "D8A322C2-5421-D493-91FB-DD85258D2194"
}],
"replicator": "pouchdb",
"version": 1,
"last_seq": 77
}
使用PockDB执行某些操作时会发生这种情况,即此代码有时会触发它:
try {
await db.bulkDocs(toBeSaved)
} catch (err) {
errorCallback(err, importObj)
}
我知道是无法复制的文档,但我是否需要担心显示的错误消息?他们确实解释了如何处理冲突,但这似乎是一个我无能为力的问题。另外,由于这是一个批量操作,到底是哪个文档导致了冲突
编辑
My getLocalDb调用(对与Pocket/Coach的连接进行排序):
这似乎不是bulkDocs API的有效请求负载。buldDocs API需要一个数组,但您正在为失败的请求(我链接了错误的请求)传递一个objectIt的请求负载。
bulkDocs
方法工作正常,不会出错。我假设PockDB在幕后做了一些事情导致了这种情况,但不知道是什么原因。您收到了409个错误,因为当前版本的local/f.kaEuoL4i41KgUTkCHAyg==不是0-10,让我澄清一下。这个请求不是我自己提出的。这是在我的请求已经成功后,DB提出的请求。我试图了解这个错误是从哪里来的,如果它是一个问题,我能做些什么。我理解为什么会发生冲突,如果我更新的是我的文档,我会处理它。我处理不了这个。
getLocalDb: function (onSyncCompleteDispatch) {
var localDb = new PouchDb(this.databaseName, {auto_compaction: true})
var liveDb = this.getLiveDb()
var self = this
// Only send a db object once it has sync'd with the remote host.
return new Promise(function (resolve, reject) {
resolve(localDb)
// We're not using continuous sync because the loading bars on the app will go wild
// We don't need to get data without users clicking anything at this point.
localDb.sync(liveDb, {
live: false,
retry: false
}).on('complete', function (info) {
var requiresReload = info.pull.docs_written > 0 || info.pull.docs_read > 0 || info.push.docs_written > 0 || info.push.docs_read > 0
if (requiresReload) {
typeof self.onSyncCompleteCallback === 'function' && self.onSyncCompleteCallback(info)
}
}).on('error', function (err) {
if (err.message === 'getCheckpoint rejected with ') {
// Don't need to resolve anything here as we resolved it above and nothing will have
// changed as no connection is available.
console.log('No live connection available, return local (without sync).')
} else {
typeof self.onSyncErrorCallback === 'function' && self.onSyncErrorCallback(err)
reject(err)
}
})
})
}