首页 > 解决方案 > 文件未按正确顺序解析

问题描述

我正在使用 PapaParse 解析多个 CSV 文件。文件选择器按 ABCDE 的顺序排列它们,但并不总是按该顺序解析它们。我知道这是因为 PapaParse 将在一个文件之前完成一个文件,但我按照它们从文件选择器中出现的顺序(即字母顺序)解析它们是至关重要的。

var Files = $('input[id="upload"]')[0].files;
var allProcessed = [], allDates = [];
for (i in Files)
{
  const date = new Date(Files[i].lastModified);
  allDates.push((date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear());

  Papa.parse(Files[i],
  {
    skipEmptyLines: true,
    complete: function(results)
    {
      allProcessed.push(results);
      if (allProcessed.length == Files.length)
      {
        console.log('all done');
      }
    }
  }
}

标签: javascriptpapaparse

解决方案


爸爸解析文档

Papa.parse(file, config):不返回任何内容。结果异步提供给回调函数。

因此无法保证解析顺序。如果您确实需要按顺序解析它们,则可以在一个解析完成时开始下一个解析。

这是一个示例,说明如何将调用链接到Papa.parse(),假设您有一个文件数组:

const files = [ /*an array of files*/ ];
let currentIndex = 0;

function getNextFile() {
  return files.length == currentIndex? null : files[currentIndex++];
};

const config = {
  skipEmptyLines: true,
  complete: function(results) {
    allProcessed.push(results);
    parseNextFile();
  }
};

function parseNextFile() {
    const file = getNextFile();
    if (!file) {
      console.log('all done');
    } else {
      Papa.parse(file, config);
    }
};

parseNextFile();

推荐阅读