Продолжить функцию после завершения предыдущей функции - PullRequest
0 голосов
/ 21 июня 2020

Я создаю сценарий для создания PDF-файла для всех продуктов магазина с помощью PDFkit.

Итак, у меня есть for-l oop, который просматривает страницы:

// see the range of buffered pages
const range = doc.bufferedPageRange(); // => { start: 0, count: 2 }
for (
  i = range.start, end = range.start + range.count, range.start <= end;
  i < end;
  i++
) {
  utils.generateHeader(doc); //generate header => here is the problem
  console.log(1); //gets called after"utils.generateHeader(doc);" is finished executing

  doc.switchToPage(i);
  doc
    .font(robotoReg)
    .fontSize(16)
    .text(`Page ${i + 1} of ${range.count}`);
  utils.generateFooter(doc);
}

Далее, у меня проблема, что utils.generateHeader(doc); необходимо загрузить изображение продукта, чтобы вставить изображение в pdf:

const download = (url, path, callback) => {
  request.head(url, (err, res, body) => {
    request(url).pipe(fs.createWriteStream(path)).on("close", callback);
  });
};

const utils = {
  generateHeader:  (doc) => {
    let url =
      "https://images.pexels.com/photos/814499/pexels-photo-814499.jpeg";

    const path = "./images/image.png";
     download(url, path, () => {
      console.log(1);
      doc
        .image(path, 50, 45, { width: 50 })
        .fillColor("#444444")
        .fontSize(20)
        .text("ACME Inc.", 110, 57)
        .fontSize(10)
        .text("123 Main Street", 200, 65, { align: "right" })
        .text("New York, NY, 10025", 200, 80, { align: "right" })
        .moveDown();
      console.log(3);
    });

  
    console.log(2); //this gets called on time 
  }}

Теперь проблема в том, что это выполняется, но изображение не еще не скачал. поэтому после того, как сценарий выполняет все функции, изображение загружается и пытается вставить его в файл pdf, и я получаю сообщение об ошибке: Error [ERR_STREAM_PUSH_AFTER_EOF]: stream.push() after EOF

Итак, мне нужно, чтобы сначала utils.generateHeader(doc); ждал чтобы изображение было загружено, тогда for-l oop должен продолжить выполнение остальной части скрипта, но я немного не понимаю, как все это asyn c.

Спасибо за вашу помощь.

...