Я создаю сценарий для создания 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.
Спасибо за вашу помощь.