node.js - 上传数据时暂停 Node csv-parser

标签 node.js csv parsing

我正在使用 Node csv-parser我的读取流来自 std in。我将其通过管道传输到解析器。在解析器可读函数内,我正在进行异步 HTTP 调用来上传此数据。在此期间,我希望解析器暂停读取。直到异步调用完成执行。

var parse = require('csv-parse');
  var output = [];
// Create the parser
  var parser = parse({delimiter: ',', columns: true, trim: true});
  
  parser.on('readable', function () {
    while (record = parser.read()) {
      console.log('Still reading');
      var jsonRec = convertIpToInt(record);
      var jsonData = JSON.stringify(jsonRec);
      output.push(new Buffer(jsonData + "\n"));
      //parser.pause();
      var assertPromise = uploadBatches1(indexName, function() {
          //parser.resume();
          console.log('Returned');
      });
     }
  });

  function uploadBatches1(indexToAssert, cb) {
    //uploads data got form parser
  }

最佳答案

由于 csv-parse 公开了可读流,因此您可以使用 parser.pause() 暂停流。

同样,更新完成后,您可以调用parser.resume() 。您还可以使用parser.isPaused()检查是否需要提前恢复。 .

您可以在此处阅读有关可读流以及暂停方法的作用的更多信息: https://nodejs.org/api/stream.html#stream_readable_pause

根据上述内容,您应该实现 parser.on('data')可读流事件,而不是 while (record = parser.read())环形。如果您自己主动调用 read 方法,则暂停流不会执行任何操作。

考虑像这样重组代码,然后使用文件系统中的 parser.pipe 读取:

var parse = require('csv-parse');
var output = [];
// Create the parser
var parser = parse({delimiter: ',', columns: true, trim: true});

parser.on('data', function () {
  console.log('Still reading');
  var jsonRec = convertIpToInt(record);
  var jsonData = JSON.stringify(jsonRec);
  output.push(new Buffer(jsonData + "\n"));
  parser.pause();
  var assertPromise = uploadBatches1(indexName, function() {
      parser.resume();
      console.log('Returned');
  });
});

function uploadBatches1(indexToAssert, cb) {
  //uploads data got form parser
}

关于node.js - 上传数据时暂停 Node csv-parser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47185028/

相关文章:

javascript - 用 null 填充缺失值

java - 我想了解 mongodb

node.js - 让 Node 模块与 typescript 一起工作

javascript - 如何从 React 中 render 方法之外的函数渲染组件?

python - 在 python 上解析站点时如何修复错误 403?

node.js - 降级 Node 版本或 npm 版本时 Node JS 出错

python - 如何在python中按时间间隔对CSV文件进行排序

azure - 如何从 Terraform 中的 CSV 列中提取不同的值?

python - 解析特定字段并用python计算出现次数

swift - xcode 8 "Command failed due to signal: Segmentation fault: 11"