【发布时间】:2018-04-10 08:56:10
【问题描述】:
我需要从 Node.JS 解析一个 CSV 文档,为每条记录(= 每一行)执行数据库操作。但是,我无法使用拉取方法找到合适的 CSV 解析器,或者至少是在解析下一行之前等待我的记录操作的推送方法。
我看过csv-parse、csvtojson、csv-streamify,但它们似乎都在没有任何流控制的情况下以连续流的形式推送事件。如果解析一个 1000 行的 CSV 文档,我基本上可以快速获得所有 1000 个回调。对于每条记录,我执行一个返回承诺的操作。目前,我不得不求助于将我所有的承诺推入一个数组,并且在获得done/end 事件后,我还等待Promise.all(myOperations) 知道文档何时已被完全处理。但这不是很好,而且,我更喜欢在获取下一条记录之前一次解析一行并完全处理它,而不是同时处理所有记录 - 它很难调试并且使用大量内存相反简单地按顺序处理每条记录。
那么,有没有支持拉模式的 CSV 解析器,或者是获取任何基于流的 CSV 解析器的方法(最好是 csvtojson,因为这是我目前正在使用的)只为新记录生成事件我的前一条记录的处理程序何时完成(使用承诺)?
【问题讨论】:
-
看看
scramjet和StreangStream.CSVParse方法。您需要在此处设置 maxParallel 选项,以确保您只并排运行一个操作,但它会完成您的工作。哦 - 它确实使用了 Promise 和/或异步函数。