与PouchDB出现错误“文档更新冲突”

时间:2018-10-22 21:10:16

标签: angular ionic-framework 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();
});

1 个答案:

答案 0 :(得分:0)

我已将代码更改为:

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

而且有效。