使用 PouchDB 时出现错误 'Document update conflict'
Getting Error 'Document update conflict' with PouchDB
我在 Ionic Project 上创建了一个服务。在线时,它将从 API 获取数据,将数据保存在 PouchDB 上并 return 数据。
离线时它只会从 pouchDB 获取数据。
但我无法更新 PouchDB 上的数据,return 消息:'Document update conflict',状态 409。
我会在这里插入一些代码..
lista.forEach(element => {
if (element) {
inserirBanco.push({
_id: `hist_transacao_${element.codigo}_${element.codigofidelidade}`,
oidEvento: element.oidEvento,
codigo: element.codigo,
codigofidelidade: element.codigofidelidade,
codigofidelidadelote: element.codigofidelidadelote,
datarequisicao: element.datarequisicao,
datasorteio: element.datasorteio,
latitude: element.latitude,
longitude: element.longitude,
nomeevento: element.nomeevento,
quantidadetitulo: element.quantidadetitulo,
situacao: element.situacao,
titulofinal: element.titulofinal,
tituloinicial: element.tituloinicial,
tipo_registro: 'transacoes-vendas-com-historico'
});
}
});
}
if (inserirBanco.length > 0) {
this.getRevData(inserirBanco).subscribe((res) => {
console.log('beforeBulk');
console.log(res);
res.forEach((obj) => {
this._db.put(obj);
});
})
}
getRevData 函数
private getRevData(list: Array<any>): Observable<Array<any>> {
return new Observable(observer => {
this._db.allDocs( (listaDocs) => {
if(listaDocs){
listaDocs.forEach((item) => {
list.forEach((itemActual) => {
if(itemActual._id === item._id) {
itemActual._rev = item._rev;
}
});
});
}
});
observer.next(list);
observer.complete();
});
我已将代码更改为:
if (inserirBanco.length > 0) {
inserirBanco.forEach((obj) => {
this._db.getId(obj._id)
.then(registro => {
this._db.delete(registro).then(() => {
this._db.add(obj);
});
}).catch(() => {
this._db.add(obj);
});
});
}
并且有效。
我在 Ionic Project 上创建了一个服务。在线时,它将从 API 获取数据,将数据保存在 PouchDB 上并 return 数据。
离线时它只会从 pouchDB 获取数据。
但我无法更新 PouchDB 上的数据,return 消息:'Document update conflict',状态 409。
我会在这里插入一些代码..
lista.forEach(element => {
if (element) {
inserirBanco.push({
_id: `hist_transacao_${element.codigo}_${element.codigofidelidade}`,
oidEvento: element.oidEvento,
codigo: element.codigo,
codigofidelidade: element.codigofidelidade,
codigofidelidadelote: element.codigofidelidadelote,
datarequisicao: element.datarequisicao,
datasorteio: element.datasorteio,
latitude: element.latitude,
longitude: element.longitude,
nomeevento: element.nomeevento,
quantidadetitulo: element.quantidadetitulo,
situacao: element.situacao,
titulofinal: element.titulofinal,
tituloinicial: element.tituloinicial,
tipo_registro: 'transacoes-vendas-com-historico'
});
}
});
}
if (inserirBanco.length > 0) {
this.getRevData(inserirBanco).subscribe((res) => {
console.log('beforeBulk');
console.log(res);
res.forEach((obj) => {
this._db.put(obj);
});
})
}
getRevData 函数
private getRevData(list: Array<any>): Observable<Array<any>> {
return new Observable(observer => {
this._db.allDocs( (listaDocs) => {
if(listaDocs){
listaDocs.forEach((item) => {
list.forEach((itemActual) => {
if(itemActual._id === item._id) {
itemActual._rev = item._rev;
}
});
});
}
});
observer.next(list);
observer.complete();
});
我已将代码更改为:
if (inserirBanco.length > 0) {
inserirBanco.forEach((obj) => {
this._db.getId(obj._id)
.then(registro => {
this._db.delete(registro).then(() => {
this._db.add(obj);
});
}).catch(() => {
this._db.add(obj);
});
});
}
并且有效。