You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Papa.parse中step函数遇延迟未按预期逐行执行问题排查

Papa.parse step函数并发执行的原因及解决办法

你的代码

Papa.parse(my_local_file, {
    step: async function(row, parser){
        console.log('starting wait');
        await new Promise(res => {setTimeout(() => {res(7)}, 10000)});
        console.log('Row -> ' + row.data);
    },
    complete: function (){
        console.log('complete');
    }
});

原因解析

  • Papa.parse 默认会同步快速遍历所有行,每一行都会立刻触发step函数,不会等待step内的异步操作完成。你的step是异步函数,调用后会因await挂起,所以会一次性打印10次starting wait。
  • 所有step里的定时器是同时启动的,10秒后全部到期,因此会批量输出所有行数据。
  • complete函数的触发时机是Papa完成所有行的遍历调用后,和step内的异步操作无关,所以会在starting wait全部打印后立刻输出complete。

解决办法

要实现每行间隔10秒处理的效果,需要手动暂停解析流程,等当前行异步操作完成后再继续,利用parser.pause()和parser.resume()即可:

Papa.parse(my_local_file, {
    step: async function(row, parser){
        parser.pause(); // 暂停解析,阻止立刻处理下一行
        console.log('starting wait');
        await new Promise(res => {setTimeout(() => {res(7)}, 10000)});
        console.log('Row -> ' + row.data);
        parser.resume(); // 恢复解析,处理下一行
    },
    complete: function (){
        console.log('complete');
    }
});

内容的提问来源于stack exchange,提问作者machupiccu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:11:12