我正在使用PapaParse解析多个CSV文件。文件选择器按A B C D E的顺序排列它们,但并非总是按该顺序对其进行解析。我知道这是因为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');
}
}
}
}
答案 0 :(得分:1)
Papa.parse(文件,配置):不返回任何内容。结果异步提供给回调函数。
因此不能保证解析顺序。如果您确实需要对它们进行顺序分析,则可以在一个解析完成后开始下一个解析。
这里是一个示例,假设您有一个文件数组,如何将调用链接到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();
答案 1 :(得分:0)
您似乎需要在for循环中处理异步操作。这样做确实会有些棘手。 this post中的第一个答案似乎可以回答您的问题。
尝试执行一个递归函数,该函数在回调完成时会自行调用。类似于以下内容,但更多的是针对帖子中其他人的内容。
function recursiveRead() {
readFile(file, () => {
recursiveRead();
})
}