2017-09-05 10 views
0

私はpdfからテキストを抽出して、定義した正規表現に一致するpdfのページ数を表す数値を返します。JSの約束で期待通りに動作しない

私の問題は、1ページのテキストがマッチの一部であるかどうかを定期的にチェックするのではなく、私の関数がその部分をページよりも小さなセクションに分割することです。カウントは、ページ全体が読み込まれた後にのみインクリメントされます。

getnopages: function(){ 
    var fulltext = "" 
    var partialmatch;  
    var somerx = /something/ 
    return pdfjs.getDocument(data).then(function(pdf) { 
    var pages = []; 
    pageNumbers = []; 
    for (var i = 0; i <= 6; i++) { 
     pages.push(i); 
    } 
    var found = false; 
    var count = 1; 
    return Promise.all(pages.map(function(pageNumber) { 
     pageNumbers.push(pageNumber); 

     return pdf.getPage(pageNumber + 1).then(function(page) 

      return page.getTextContent().then(function(textContent) { 
       return textContent.items.map(function(item) { 
        fulltext+=item.str+'&&&'; 

        return item.str; 
       }).join('&&&'); 
      }); 
     }).then(function(){ 
      count++; 
      console.log('the count is ' + count) 
      var partialmatch; 
      try { 
       partialmatch = fulltext.match(somerx)[0] 
       console.log('the match: ' + partialmatch) 
       var full = fulltext.slice(0, fulltext.length-3) 
      console.log('the full text ' + full) 
      if (fulltext && partialmatch!==full && !found){ 
      found = true; 
      console.log('now we found our number: ' + count) // this finds where the full text differs from the partial text but returns a number too large to be a page number 
      }     
     } 
     catch(e){ 
      console.log(e) 
     }        


     });    
    })); 
} 

誰も私にはそのカウントが正しくページ番号をインクリメントしているので、これを書き換える方法を見つけ出す手助けすることはできますか?

+0

それは、(全文が定義されている場所は明らかではないが、それはランダムな順序ですべてのページからテキストを蓄積しているように見えますGETPAGE/getTextContentは、すべてのページとこれらのために一度呼び出されるので、任意の順序で解決してください) – async5

+0

@ async5私は変数の宣言を偶然に出しました。それらを再び編集しました。フルテキストがテキストを正しい順序で返すようにする方法を提案できますか? –

答えて

1

私はあなたのコードのどこに問題があるのか​​本当にわかりませんが、私はあなたに約束があまりにも多くのネスティングを避けることを提案します。あなたは以下のようにあなたの約束を連鎖によってネストを減らすことができます

getnopages: function() { 

    var somerx = /something/ 

    return pdfjs.getDocument(data).then(function(pdf) {  

     var pages = []; 
     pageNumbers = []; 
     for (var i = 0; i <= 6; i++) { 
      pages.push(i); 
     } 
     var found = false; 
     var count = 1; 

     var promises = pages.map(pageNumber => { 
      pageNumbers.push(pageNumber); 
      return pdf.getPage(pageNumber + 1).then(page => { 
       return page.getTextContent(); 
      }).then(textContent => { 
       return textContent.items.map(item => { 
        fulltext += item.str +'&&&'; 
        return item.str; 
       }).join('&&&'); 
      }); 
     }); 
     return Promise.all(promises).then(() => { 
      ... 
     }); 

    }); 
} 
関連する問題