2016-05-11 7 views
0

私はいくつかの添付ファイルを追加したい、と私は成功したものを追加することができますが、ループの中で、それだけで一つの画像保存されたとき:5.pngをし、競合エラーを取得:Pouchdb forループにどのようにputAttachmentを入れることができますか?

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を指定しましたが、競合がまだ発生しますs。なぜ私は理解できません。

CustomPouchError {ステータス:409、名称: "競合" メッセージ: "文書更新の競合"、エラー:真}

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

答えて

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

をまた約束で何かを行うことができますが、これは単に次の反復を呼び出したときに、以前のプット・仕上げ。あなたのfor loopのようにカウンタが負になると停止します。

+0

ありがとうwinhowes、あなたの答えは私のために非常に役立ちます、私はまだコンフリクトのエラーを取得しました、私はそのリビジョン_revを指定した、私はコンフリクトが発生する理由を理解できません – AdvancingEnemy

+0

私はあなたが同じrevID毎回更新されるたびに変更されませんか? revIDは 'res'オブジェクトで返されますか? – winhowes

+0

[このメソッドは添付ファイルを追加するために既存の文書を更新するので、文書がすでに存在する場合はrevが必要です。ドキュメントがまだ存在しない場合、このメソッドは添付ファイルを含む空のドキュメントを作成します。](https://pouchdb.com/api.html#save_attachment)。私はAPIに従っていますが、私のdoc.revは私のdocオブジェクトのものです。これは次のようなものです:_rev: "" 56-eb390d85ef90f92efdfc0cf458d2590b "" – AdvancingEnemy

0

あなたはWe have a problem with promises約特にセクション読みしようとする場合があります「どのように私は約束ではforEach()を使うのですか?」 PouchDBのAPIが約束を返すので、おそらくPromise.all()を使いたいと思うでしょう。

関連する問題