首页 > 解决方案 > 使用 PouchDB 出现错误“文档更新冲突”

问题描述

我在 Ionic Project 上创建了一项服务。在线时,它将从 API 获取数据,将数据保存到 PouchDB 并返回数据。

离线时它只会从 pouchDB 获取数据。

但是我无法更新 PouchDB 上的数据,返回消息:'文档更新冲突',状态 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();
});

标签: angularionic-frameworkpouchdb

解决方案


我已将代码更改为:

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);
    });
  });
}

它有效。


推荐阅读