NodeJS和Promise(JavaScript)中for循环后数组值丢失

时间:2017-10-04 16:12:52

标签: javascript arrays node.js promise pdf.js

我遇到了如何使用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' } ]

感谢您的帮助!

0 个答案:

没有答案