409错误冲突更新,更新pouchDB文档

时间:2016-07-25 21:07:08

标签: angularjs ionic-framework couchdb pouchdb

我与我的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:pwd@id.cloudant.com/boardl_users');

        return usersDatabaseRemote;
    }
])

导致:

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

但是从代码中可以看出,我从远程文档中获取了修订号rev,因此我不明白为什么会出现此问题。

谢谢

1 个答案:

答案 0 :(得分:1)

信用:@AlexisCôté

我多次调用更新远程文档的异步函数

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

这是在弄乱._rev号码。

所以现在我在一个对象中同时做所有参数:

pouchDBservice.addObjectToExistingUser(userr._id, objectToAdd);

with:

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