409 ошибка обновления конфликта, обновление документа pouchDB

0

У меня странный конфликт с моим кодом pouchDB, пытающимся обновить документ в моей базе данных

код:

this.addToExistingUser = function (docId, key, value) {
        usersDatabaseRemote
                .get(docId)
                .then(function (doc) {
                    doc[key] = value;
                    return usersDatabaseRemote.put(doc, docId, doc._rev);
                })
                .then(function () {
                    console.log('added field: ' + key + ' to doc ' + docId);
                })
                .catch(function (err) {
                    console.log("error from addToExistingUser:");
                    console.log(JSON.stringify(err));
                });

 }

где:

.factory('usersDatabaseRemote', [
    'pouchDB',
    function (pouchDB) {
        'use strict';

        var usersDatabaseRemote = pouchDB('https://id:[email protected]/boardl_users');

        return usersDatabaseRemote;
    }
])

приводит к:

{"status":409,"name":"conflict","message":"Document update conflict","error":true,"reason":"Document update conflict."}

Но, как вы можете видеть из кода, я беру номер ревизии rev из удаленного документа, поэтому я не понимаю, почему существует проблема с этим.

благодаря

  • 1
    Вы вызывали функцию "addToExistingUser" два раза подряд? Конфликт может возникнуть из-за асинхронных вызовов в вашем документе.
  • 0
    Точно! ты прав @AlexisCôté. AlexisCôté.
Теги:
ionic-framework
couchdb
pouchdb

1 ответ

1

кредит: @AlexisCôté

Я несколько раз вызывал функцию async, которая обновляет удаленный документ

pouchDBservice.addToExistingUser(userr._id, 'weight',     
pouchDBservice.addToExistingUser(userr._id, 'height', userHeight);
pouchDBservice.addToExistingUser(userr._id, 'technique', userTechnique);

и это возилось с номером._rev.

Итак, теперь я делаю все параметры одновременно в объекте:

pouchDBservice.addObjectToExistingUser(userr._id, objectToAdd);

с:

this.addObjectToExistingUser = function (docId, obj) {
            usersDatabaseRemote
                .get(docId)
                .then(function (doc) {
                    for (var key in obj) {
                        if (!obj.hasOwnProperty(key)) continue;
                        console.log(key, obj[key])
                        doc[key] = obj[key];
                    }
                    return usersDatabaseRemote.put(doc);
                })
                .then(function () {
                    console.log('addObjectToExistingUser added object: ' + JSON.stringify(obj) + ' to doc ' + docId);
                })
                .catch(function (err) {
                    console.log("error from addObjectToExistingUser:");
                    console.log(JSON.stringify(err));
                });
        };

Ещё вопросы

Сообщество Overcoder
Наверх
Меню