首先,我为我糟糕的英语道歉:D
您好,我有以下情况让我很感兴趣,我有一个在 react 中制作的前端和一个在 node 中通过 express 接收请求的后端。这个想法是,我从前端使用 POST 方法发送一个 pdf 文件,后端处理这个文件,进行必要的处理(将页面分成更多文件并在 pdf 中获取数据),最后它返回这些处理过的 pdf . 我想在 POST 响应中返回这些新文件,但我遇到了异步问题。处理文件时,我使用 pfd2Json 库,这个库显然异步处理您选择的 pdf 并让执行流程继续,我的问题是当我发送库来处理我的 pdf 时,它把它放在“后台” “处决仍在继续,
当一个 post 请求到达时,程序执行这个函数“ getPDF() ”
async function getPdf(fileLocation) {
let pdf = fileLocation;
await pdfSeparator(pdf, folderTemp);
await getInformationsPdf();
return arrayObj
}
当它执行getInformationsPdf()时,程序执行所有内容,但不等待库处理 pdf。在这种情况下,我将每个单独的文件加载到一个 forEach 中,使用pdfParser.loadPDF(fileLocation); 上传我的pdf,他正在等待pdfParser.on(“pdfParser_dataReady”,pdfData => {})读取所有内容只是因为这个方法是异步的,它只是调用它并将其置于后台,使流程一直持续到块的末尾并转到下一个 forEach 项目,而 pdf 甚至还没有被处理。最后,所有的 forEach 都已经执行并且 pdf 还没有被处理,程序发送响应并且来自 pdf 的数据在后端。有没有办法让我在发送回复之前强制等待治疗?
async function getInformationsPdf() {
let arrayObjs = []
fs.readdirSync(folderTemp).forEach(file => {
var pdfParser = new PDFParser(this, 1);
let fileLocation = folderTemp + file;
pdfParser.loadPDF(fileLocation);
pdfParser.on("pdfParser_dataError", (errData) => {
console.error(errData.parserError)
});
pdfParser.on("pdfParser_dataReady", (pdfData) => {
let t1 = pdfData.formImage.Pages[0].Texts[32].R[0].T.replace(/%20/g, " ");
let t2 = pdfData.formImage.Pages[0].Texts[33].R[0].T.replace(/%20/g, " ");
let t3 = pdfData.formImage.Pages[0].Texts[34].R[0].T.replace(/%20/g, " ");
let t4 = pdfData.formImage.Pages[0].Texts[35].R[0].T.replace(/%20/g, " ");
let t5 = pdfData.formImage.Pages[0].Texts[36].R[0].T.replace(/%20/g, " ");
let t6 = pdfData.formImage.Pages[0].Texts[37].R[0].T.replace(/%20/g, " ");
let t7 = pdfData.formImage.Pages[0].Texts[38].R[0].T.replace(/%20/g, " ");
let t8 = pdfData.formImage.Pages[0].Texts[39].R[0].T.replace(/%20/g, " ");
let t9 = pdfData.formImage.Pages[0].Texts[40].R[0].T.replace(/%20/g, " ");
let textsPdf = [t1, t2, t3, t4, t5, t6, t7, t8, t9];
let fileWithTexts = {
file: fileLocation,
texts: textsPdf
}
renameFileMatch(fileWithTexts);
arrayObjs.push(fileWithTexts);
});
})
return arrayObjs;
}