Pouchdb如何将forAttachment放在for循环中?

时间:2016-05-11 03:20:38

标签: javascript couchdb pouchdb couchapp

我想添加一些附件,我可以成功添加一个附件,但在循环中,它只会保存一个图像:5.png并出现冲突错误:

enter image description here

enter image description here

    function addNewDoc() {

        db.get('my0112doc', function(err, doc) {
            if (err) {
                return console.log(err);
            }
            // var blob = base64toBlob(imgSoucrce30m, 'image/png', 1024);
            var blob =imgSoucrce30m;
            var attachment = {
                content_type: 'image/png',
                data: blob
            }
            for (var i = 5; i >= 0; i--) {
                var nameImg=i+'.png';
                db.putAttachment('my0112doc', nameImg, doc._rev, blob, 'text/plain', function(err, res) {
                    if (err) {
                        return console.log(err);
                    }
                });
            }
        });
    }

====================新解决方案========================= ===============

在我的函数中,我已经指定了它的修订版_rev,但仍然会发生冲突。我不明白为什么。

CustomPouchError {status:409,name:“conflict”,message:“Document update conflict”,error:true}

    function addNewDoc() {
        db.get('my0112doc', function(err, doc) {
            if (err) {
                return console.log(err);
            }
            // var blob = base64toBlob(imgSoucrce30m, 'image/png', 1024);
            var blob = imgSoucrce30m;
            addAttachment(5,doc._rev,blob);
        });
    }

    function addAttachment(counter,revId,blob) {
        var nameImg = counter + '.png';
        db.putAttachment('my0112doc', nameImg, revId, blob, 'text/plain', function(err, res) {
            if (err) {
                return console.log(err);
            }
            if (counter >= 0) {
                addAttachment(counter - 1,revId,blob);
            }
        });
    }

2 个答案:

答案 0 :(得分:1)

所以问题是putAttachment是异步的。因此,您需要等待它再次解决才能解决。我不确定它是否会返回一个承诺,但如果不是,你可以做这样的事情:

function addAttachment(counter) {
    var nameImg= counter + '.png';
    db.putAttachment('my0112doc', nameImg, doc._rev, blob, 'text/plain', function(err, res) {
        if (err) {
            return console.log(err);
        }
        if (counter >= 0) {
            addAttachment(counter - 1);
        }
    });
}
addAttachment(5);

您也可以使用promises做一些事情,但这只是在前一次put完成时调用下一次迭代。一旦计数器为负,它就会停止,就像你的for loop

一样

答案 1 :(得分:0)

你可能想尝试阅读We have a problem with promises,特别是关于“我如何使用forEach()和promises的部分?”您可能希望使用App.xaml,因为PouchDB的API会返回promise。