2016-07-25 29 views
0

Ich habe einen seltsamen Konflikt mit meinem pouchDB Code ein Dokument in meiner Datenbank409 Fehlerkonflikt Update, Aktualisierung pouchDB doc

Code zu aktualisieren versuchen:

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

} 

wo:

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

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

     return usersDatabaseRemote; 
    } 
]) 

führt zu:

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

Aber wie Sie aus dem Code sehen können, nehme ich die Revisionsnummer rev aus dem Remote-Dokument, so sehe ich nicht, warum gibt es ein Problem damit.

Dank

+1

Haben Sie die Funktion "addToExistingUser" zwei Mal hintereinander anrufen? Der Konflikt kann aufgrund von asynchronen Aufrufen in Ihrem Dokument auftreten. –

+0

Genau! Du hast Recht @ AlexisCôté. – Louis

Antwort

1

Kredit: @ AlexisCôté

ich mehrmals die Asynchron-Funktion, die die Remote-doc

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

und dies wurde Messing mit der ._rev Nummer aktualisiert rief.

So, jetzt mache ich alle Parameter zur gleichen Zeit in einem Objekt:

pouchDBservice.addObjectToExistingUser(userr._id, objectToAdd); 

mit:

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