2016-05-11 11 views
0

Ich möchte ein paar Anhänge hinzuzufügen, und ich kann man erfolgreich hinzufügen, aber wenn in der Schleife, wird es retten nur ein Bild: 5.png und Konfliktfehlermeldung erhalten:Pouchdb Wie kann ich Attachment in eine for-Schleife einfügen?

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

==================== neue Lösung ======================== ================

in meiner Funktion habe ich seine Revision _rev angegeben, aber der Konflikt immer noch auftreten s. Ich kann nicht verstehen warum.

CustomPouchError {status: 409, name: "Konflikt", Meldung: "Document Aktualisierungskonflikt", Fehler: 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); 
      } 
     }); 
    } 

Antwort

1

Also das Problem ist, dass putAttachment asynchron ist. Sie müssen also warten, bis das Problem behoben ist, bevor Sie es erneut setzen können. Ich bin mir nicht sicher, ob es ein Versprechen gibt oder nicht, aber wenn du nicht so etwas tun könnte:

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

Sie könnten auch mit dem Versprechen, etwas zu tun, aber das erfordert nur die nächste Iteration, wenn die vorherigen Put-Oberflächen . Es stoppt, sobald der Zähler wie Ihr for loop negativ ist.

+0

danke winhowes, Ihre Antwort ist sehr hilfreich für mich, ich habe es versucht, noch bekomme ich den Konflikt Fehler, ich habe seine Revision _rev angegeben, kann ich nicht verstehen, warum der Konflikt auftritt – AdvancingEnemy

+0

Ich bemerkte, dass Sie in der gleichen RevID übergeben jedes Mal, aber würde sich das nicht jedes Mal ändern, wenn es aktualisiert wird? Wird die revID im 'res' Objekt zurückgegeben? – winhowes

+0

[Diese Methode aktualisiert ein vorhandenes Dokument, um den Anhang hinzuzufügen, so dass eine Überarbeitung erforderlich ist, wenn das Dokument bereits vorhanden ist. Wenn das Dokument noch nicht existiert, erstellt diese Methode ein leeres Dokument, das den Anhang enthält.] (Https://pouchdb.com/api.html#save_attachment). Ich mache es nach der API, meine doc._rev ist von meinem doc-Objekt, es ist so: _rev: "" 56-eb390d85ef90f92efdfc0cf458d2590b "" – AdvancingEnemy

0

Sie können versuchen, We have a problem with promises lesen und insbesondere den Abschnitt über "wie verwende ich ForEach() mit Versprechen?" Wahrscheinlich möchten Sie Promise.all() verwenden, da die PouchDB-API Versprechungen liefert.