爸爸解析器等待步骤
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
块中也很好,但这当然不是重点。
我能够在 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
块中也很好,但这当然不是重点。