2017-03-27 4 views
0

Ich habe eine Liste von Elementen, und jedes Element haben eine Liste von Anweisungen. Jeder Artikel wird in einer PDF-Datei ausgedruckt, wobei jeder Befehl eine Seite belegt und lokal gespeichert wird. Was ich jetzt habe, ist eine for-Schleife, die die Datenbank nach den Anweisungen jedes Elements abfragt und nach dem Auffüllen der PDF-Datei einen Pfad ausbildet. Das Problem liegt daran, dass die Abfrage asynchron ist, nur die letzte PDF-Datei kann geöffnet werden, der Rest ist beschädigt. Wie überwinde ich das? Mein Code ist wie folgt.PDFKIT Piping mehrere PDF-Dateien in einer Schleife

var counter = 0 
for (var o=0; o<itemList.length; ++o){ 
    Steps.find({itemid:itemid[o], sort: "sequence asc"}).exec(function(err,steps){ 
    doc[counter] = new PDFDocument(); 
    if(!err){ 
     doc[counter].pipe(fs.createWriteStream(path + "DocName" + counter + ".pdf")); 
     for (var x=0; x<steps.length; ++x){ 
     doc[counter].text("Instructions: " + steps[x].instruction.font('Times-Roman', 13); 
     } 
     ***/*if (counter == itemList.length-1){ 
     doc[counter].end(); 
     }*/*** 
     //That is the problem, i shouldn't have done the check and end the doc immediately, that solved the issue. 
     doc[counter].end(); 

     ++counter; 
    } 
    } 
} 
+0

Verwenden Sie eine der folgenden Optionen: 'Callback',' Versprechen' oder 'Async/Warten'. Beliebte Bibliotheken sind [async] (http://caolan.github.io/async/), [bluebird] (http://bluebirdjs.com/docs/getting-started.html). Welche Version des Knotens verwenden Sie? – Sangharsh

+0

Überprüfen Sie auch http://stackoverflow.com/q/14220321/1435132 – Sangharsh

Antwort

0

Die Frage bearbeitet, um die Arbeitslösung zu zeigen. Ein unvorsichtiger Fehler, bei dem ich nach der letzten Datei nur ein doc.end() schreibe, anstatt es nach jeder einzelnen Datei zu beenden.