爸爸解析器等待步骤

Papa parser to await for step

我能够在 papa 解析器中配置所有内容,即使解析 20 万个项目也能正常工作。所以我可以处理所有数据,它们等待结果数组中的每一行。问题是,如果我正在使用一个步骤,我如何让该步骤等待上一步?这导致解析器触发数千个调用然后阻止我。我试图将步骤包装在另一个函数中,但这也无济于事。

这是我在步骤调用中所做的示例

async function stepFn(results, parser) {
stepped++;
      (await (async function () {
        if (results) {
          if (results.data) {
            rowCount += results.data.length;
            console.log('checking if item exists');
            var itemExistsP = await restcallToRetrieve();
            if (itemExistsP.length > 0) {
              console.log('Item exists, skipping');
              //return;
            } else {
              console.log('adding item to list');
              await restcalltoAdd();
              // return item;
            }
          }
          if (results.errors) {
            errorCount += results.errors.length;
            firstError = firstError || results.errors[0];
          }
        }
      }()));
}

这是解析器调用:

Papa.parse($('#parse-file')[0].files[0], {
            delimiter: '',
            header: true,
            dynamicTyping: false,
            skipEmptyLines: true,
            preview: 0,
            encoding: '',
            step: stepFn,
            worker: false,
            comments: '',
            download: false,
            complete: completeFn,
            error: errorFn,
            });

只需创建一个 async stepFunction:

async function stepFn(results, parser) {
    parser.pause(); // pause the parser

    if (results.data) {
        rowCount += results.data.length;

        let itemExists = await restCallToRetrieve(/*probably the data goes here*/);
        if (itemExists.length > 0) {
            console.log('Item exists, skipping');
        }
        else {
            console.log('adding item to list');
            await restCallToAdd(/*probably the data goes here*/);
        }
    }
    else if (results.errors.length > 0) { //Note that I am checking if there are errors
        errorCount += results.errors.length;
        firstError = results.errors[0];
    }
    parser.resume(); // resume the parser
}

然后在 parse config object:

Papa.parse(file, {
    step: stepFn
});

将您等待的所有内容都放在 try catch 块中也很好,但这当然不是重点。