我遇到了如何使用Promise以异步方式处理数据的问题。
我创建了一个接收PDF流的函数,并使用pdf.js解析文档,页面和注释,以Array格式提取我需要的值。
问题是,在遍历页面和每个注释元素之后,我无法更新外部范围变量。
目标是让dataArray填充PDF文档中每个页面的每个元素的记录。
我的代码如下:
const pdfjs = require('pdfjs-dist');
function parsePdf(data) {
let dataArray = [];
pdfjs.getDocument(data)
.then(pdf => {
for (let i = 1; i <= pdf.numPages; i++) {
pdf.getPage(i)
.then(page => {
page.getAnnotations()
.then(items => {
items.forEach(element => {
let obj = {};
if (element.fieldName) {
obj.id = element.id;
obj.name = element.fieldName;
obj.value = element.fieldValue;
obj.isCheckbox = element.checkBox;
obj.isRadioButton = element.radioButton;
obj.isReadOnly = element.readOnly;
obj.type = element.fieldType;
dataArray.push(obj);
}
});
// Return values See example 1 below
console.log(dataArray);
});
});
}
});
// Returns Empty Array []
console.log(dataArray);
return dataArray;
}
我想了解我可以将内部forEach范围内返回的值传递给函数中的外部变量。我知道它与Promises如何处理响应有关,但我无法弄清楚如何链接.then()
代码。
每个console.log(dataArray)
[
{ id: '59R',
name: 'Name_es_:signer:signature',
value: 'Jon Doe',
isCheckbox: undefined,
isRadioButton: undefined,
isReadOnly: false,
type: 'Tx' },
{ id: '62R',
name: 'Address',
value: '1 Main Street',
isCheckbox: undefined,
isRadioButton: undefined,
isReadOnly: false,
type: 'Tx' }
]
感谢您的帮助!