2017-03-27 6 views
0

나는 항목 목록을 가지고 있으며 각 항목에는 지침 목록이 있습니다. 각 항목은 하나의 페이지를 차지하고 로컬로 저장된 각 명령과 함께 PDF 파일로 인쇄됩니다. 이제는 각 항목의 지침에 대해 데이터베이스를 쿼리하고 PDF 파이프를 경로로 채운 후 for 루프를 작성했습니다. 문제는 쿼리가 비동기식이기 때문에 파이프 된 마지막 PDF 만 열리 며 나머지는 손상된 것입니다. 어떻게 극복합니까? 내 코드는 아래와 같습니다.PDFKIT 루프로 여러 PDF 파일을 파이핑

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

'callback','promise' 또는'async/await' 중 하나를 사용하십시오. 인기있는 라이브러리는 [async] (http://caolan.github.io/async/), [bluebird] (http://bluebirdjs.com/docs/getting-started.html)입니다. 어떤 노드 버전을 사용하고 있습니까? – Sangharsh

+0

또한 http://stackoverflow.com/q/14220321/1435132를 확인하십시오. – Sangharsh

답변

0

작업 솔루션을 표시하는 질문을 편집했습니다. 모든 단일 파일 다음에 마지막 파일을 끝내는 대신 마지막 파일을 작성한 후 doc.end()를 수행하는 부주의 한 실수.