使用fast-csv同步处理csv文件

Gay*_*dra 8 csv node.js

我正在尝试使用fast-csv处理csv文件,这是我的代码.

    var stream = fs.createReadStream("sample.csv");
    csv.fromStream(stream, {headers : true})
    .on("data", function(data) {
            console.log('here');
            module.exports.saveData(data, callback)
        })
    .on("end", function(){
        console.log('end of saving file');
    });

    module.exports.saveData = function(data) {
    console.log('inside saving')
    }
Run Code Online (Sandbox Code Playgroud)

我面临的问题是流程不同步.我看到的输出是类似的

这里

里面节省
内部储蓄

但是,我想要的是


里面保存

里面保存

我假设我们需要使用async.series或async.eachSeries但不完全确定如何在此处使用它.任何输入都非常感谢

提前致谢!

rob*_*lep 19

您可以暂停解析器,等待saveData完成,然后恢复解析器:

var parser = csv.fromStream(stream, {headers : true}).on("data", function(data) {
  console.log('here');
  parser.pause();
  module.exports.saveData(data, function(err) {
    // TODO: handle error
    parser.resume();
  });
}).on("end", function(){
  console.log('end of saving file');
});

module.exports.saveData = function(data, callback) {
  console.log('inside saving')
  // Simulate an asynchronous operation:
  process.setImmediate(callback);
}
Run Code Online (Sandbox Code Playgroud)

  • @vikaskv `saveData` 已经异步执行。但是,当生成最后一个“data”事件时,或者当最后一个“data”事件处理程序返回时,有可能(甚至很可能)生成“end”事件。这不会考虑事件处理程序内部的任何异步调用。您需要为此创建一个解决方法。 (2认同)