在大型数据集中异步编写和压缩PDF时跳过If语句



所以我将大型CSV文件解析为数组,并从中生成PDF,然后在我的React应用程序中压缩它们。我使用PDF-LIB来填充PDF表单,使用JSZip来压缩。许多保存函数与这两个库都是异步的。我有一个if语句,它检查某一列是否等于夹在其他代码之间的某个列。

let count = 0;
const formPdfBytes = await fetch(pdfform).then((res) => res.arrayBuffer());
const zip = new JSZip();
for (const element of csvData){
const pdfDoc = await PDFDocument.load(formPdfBytes);
const form = pdfDoc.getForm();
const accountNum = form.getTextField("Account Number");
const dob = form.getTextField("Date of Birth");
// etc
form.getCheckBox("box").check();
accountNum.setText(element["Account Number"]);
dob.setText(element["DOB"]);
// etc
if (element["Code"] === "123") { //this gets skipped in large files
form.getCheckBox("123").check();
}
const pdfBytes = await pdfDoc.save();
zip.file(fileName, pdfBytes, { binary: true }); //filename is unique name made of fields

count++; //counter to check for end of loop to save all pdfs to zip
if (count === csvData.length) {
zip.generateAsync({ type: "blob" }).then(function (content) {
saveAs(content, "pdfs.zip");
});
}
}

我只在大型数据集中遇到这个问题。较小的可以勾选方框。只有这个语句,如果我从if语句中删除它,它执行时不会出现问题。我甚至有一个很大的switch语句,它执行得很好。我认为pdf是异步保存和放置在zip中的。我尝试过将if语句包装在Promise中,但下载时zip为空。

如何确保if语句中的代码在保存和压缩PDF之前完成?

编辑:由于注释,已更改为for of循环。仍然跳过声明。我曾尝试将await放在if块中的命令前面,但没有成功。

所以根本没有问题。存在与名称和日期匹配但代码不同的重复行。由于if语句中的代码按字母顺序排列在第一位,并且fileName没有将代码作为字符串的一部分,因此它被重写。现在我必须弄清楚如何过滤掉那些重复的代码,但我更喜欢这个代码而不是其他代码。

最新更新