PDFKIT передает несколько PDF-файлов в цикле

У меня есть список элементов, и у каждого элемента есть список инструкций. Каждый элемент будет распечатан в файл PDF, где каждая инструкция будет занимать одну страницу и сохранена локально. Теперь у меня есть цикл for, который запрашивает в базе данных инструкции для каждого элемента и после заполнения PDF-файла передает его по пути. Проблема связана с тем, что запрос является асинхронным, можно открыть только последний передаваемый 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;
    }
  }
}

person Cherple    schedule 27.03.2017    source источник
comment
Используйте любой из них: callback, promise или async/await. Популярными библиотеками являются async, синяя птица. Какую версию узла вы используете?   -  person Sangharsh    schedule 27.03.2017
comment
Также проверьте stackoverflow.com/q/14220321/1435132.   -  person Sangharsh    schedule 27.03.2017


Ответы (1)


Отредактировал вопрос, чтобы показать рабочее решение. Неосторожная ошибка, когда я делаю doc.end() только после записи последнего файла, вместо того, чтобы заканчивать его после каждого отдельного файла.

person Cherple    schedule 28.03.2017