javascript - 文件未按正确顺序解析
问题描述
我正在使用 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');
}
}
}
}
解决方案
从爸爸解析文档:
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();
推荐阅读
- excel - Excel:使用中位数,如果在数组公式中给出的结果与手工挑选的单元格不同
- vue.js - 在运行时向 Vue 组件添加道具
- java - Java - 根据条件迭代地图列表
- linux - 如何更改 bash 脚本的 `echo` 输出?
- javascript - Angular 7:没有编译错误,但屏幕空白
- kubernetes - k8s、Ingress、Minio 和静态站点
- python - python中不同元素的组合
- python - 在列表中匹配和追加
- microsoft-graph-api - 通过 Microsoft Graph API 访问当前 SharePoint Online 用户的“喜欢”和“保存以供以后”文档/页面?
- javascript - 如何仅在使用它们的 HTML 页面上而不是在所有页面上调用 JS-Functions?