文件未按正确顺序解析
Files don't parse in correct order
我正在使用 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');
}
}
}
}
看来您需要在 for 循环中处理异步操作。这确实有点棘手。 this post 中的第一个答案看起来可以回答您的问题。
尝试执行一个在回调完成时调用自身的递归函数。类似下面的东西,但更多的是 post 中的另一个人所拥有的东西。
function recursiveRead() {
readFile(file, () => {
recursiveRead();
})
}
Papa.parse(file, config): doesn't return anything. Results are provided asynchronously to a callback function.
因此无法保证解析顺序。如果确实需要按顺序解析,可以在一次解析结束后开始下一次解析。
这是一个示例,说明如何将调用链接到 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();
我正在使用 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');
}
}
}
}
看来您需要在 for 循环中处理异步操作。这确实有点棘手。 this post 中的第一个答案看起来可以回答您的问题。
尝试执行一个在回调完成时调用自身的递归函数。类似下面的东西,但更多的是 post 中的另一个人所拥有的东西。
function recursiveRead() {
readFile(file, () => {
recursiveRead();
})
}
Papa.parse(file, config): doesn't return anything. Results are provided asynchronously to a callback function.
因此无法保证解析顺序。如果确实需要按顺序解析,可以在一次解析结束后开始下一次解析。
这是一个示例,说明如何将调用链接到 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();