Можно ли put
или bulkDocs
в CouchDB/pouchdb и получить такое же поведение, как при репликации, то есть выигрыш пересмотра с _conflicts
вместо 409
ответа?создать или обновить с _conflicts вместо 409
В основном я хотел бы избежать случая в следующем коде:
const docs = Object
.keys(pendingSet)
.map(id => toDoc(deepClone(pendingSet[id]), { id, rev: this.revCache.get(id) }))
const results = await this.db.bulkDocs(docs)
const conflicts = []
for (let n = 0; n < results.length; ++n) {
const result = results[n]
if (result.error === 'conflict') {
// TODO: This needs review...
const doc = await this.db.get(docs[n]._id)
const rev = `${doc._rev.split('-')[0]}-${this.serverName}`
conflicts.push({
...docs[n],
_rev: rev
})
this.revCache.set(doc._id, rev)
} else if (result.error) {
callback(result.error)
} else {
this.revCache.set(result.id, result.rev)
}
}
await this.db.bulkDocs(conflicts, { new_edits: false })
Я получил немного намека от pouchdb, но я до сих пор не знаю, как применить его.
EDIT1: Обновлен по последнему коду.
Спасибо! Это помогло мне в правильном направлении. Вопрос, хотя. Как генерируется новый «myrevtoken»? Это постоянный uuid для приложения? – ronag
Обычно токен ревизии является хешем содержимого документа. Но это зависит от вас. –