2017-10-26 4 views
1

Mein Hauptziel ist, PDF.js zu verwenden und die geparsten PDF-Daten an Front-End zu senden. Die PDF.js-Bibliothek arbeitet mit Versprechungen und gibt Daten aus der Datei nach Seitennummer zurück. Hier ist mein Problem. Ich bin mit Versprechungen nicht sehr vertraut und mache in ihnen Schleifen, um Daten zurückzugeben. Mein Code im Moment wie folgt aussieht:Zurückgeben von Daten von Promise

var pdf = path.join(__dirname, '../../testoutput.pdf'); 
    pdfJsLib.getDocument(pdf).then(function(doc){ 
     var promises = []; 
     for(i = 1; i <= doc.numPages; i++){ 
      //promises.push(doc.getPage(i)); 
      doc.getPage(i).then(function(page){ 
       promises.push(page.getTextContent()); 

       var response = []; 
       if(i == doc.numPages + 1){ 
        var promiseLimiter = promises.length; 
        Promise.all(promises).then(function(data){ 
         response.push(data[0]); 
         if(promiseLimiter == doc.numPages){ 
          res.status(200).json(response); 
         } 
        }) 
       } 
      }) 

Ich versuche page.getTextContent() Informationen zu einem Array zu drücken und das Array als Antwort zu senden, aber ich verstehe, dass ich dies für die falsche Art und Weise tue. Irgendwelche Ideen, wie man die Schleife mit Versprechungen in diesem Fall richtig arbeiten lässt?

+1

Promise.all tun wollen würde, muss aus sein, WHW beendet und erfüllt Versprechen –

+0

arr was getTextContext() –

+0

getTextContext() ist eine Funktion, die von der PDF.js-Bibliothek zur Verfügung gestellt wird, und Sie können damit Textdaten aus der PDF-Seite extrahieren. Es gibt Ihnen Daten über die Wörter und ihre Position und Stile zurück. Daten von diesem sieht normalerweise ungefähr so ​​aus: https://pastebin.com/tT7gSu2a. Dies sollte auch als Versprechen verwendet werden page.getTextContent(). Then (function (content) {// mach etwas mit Inhalt}) –

Antwort

2

scheint mir, wie Sie so etwas wie dieses

var pdf = path.join(__dirname, '../../testoutput.pdf'); 
pdfJsLib.getDocument(pdf).then(function(doc){ 
    var promises = []; 
    var promiseLimiter ; 
    for(i = 1; i <= doc.numPages; i++){ 
     //promises.push(doc.getPage(i)); 
     var p = doc.getPage(i).then(function(page){ 
      return page.getTextContent(); 

      var response = []; 
      if(i == doc.numPages + 1){ 
       promiseLimiter = promises.length; 
      } 
     }) 
     promises.push(p); 
    } 
    Promise.all(promises).then(function(data){ 
        if(promiseLimiter == doc.numPages){ 
         res.status(200).json(data); 
        } 
       }) 
+1

Wenn du versuchst, das Array der Versprechungen aus dem then() zu durchlaufen, ist es leer. Also im Grunde müssen Sie eine Art Schleife mit dem Versprechen implementieren und es gibt Daten zurück. Und das ist der Punkt, an dem mein Wissen aufgehört hat. –

+0

ah, ja, lass mich meine Antwort bearbeiten. Nochmal Überprüfen. – TKoL

+0

Danke das hat das Problem gelöst. Die PromiseLimiter if-Anweisung in der for-Schleife und in der Promise.all ist nicht notwendig. Wenn sie entfernt werden, werden die Daten in der korrekten Art und Weise gesendet. –

Verwandte Themen