在数据事件上将额外的参数传递给fs.createReadStream

时间:2018-07-02 18:02:33

标签: node.js csv

当前,我正在尝试将一个额外的参数传递给on事件,一旦从CSV文件中提取数据,该事件将被触发。我尝试将其作为回调函数的额外参数添加,但它始终是未定义的。

fs.createReadStream(values[i], {start: 118})
  .pipe(fastCSV())
  .on('data', function(data, myExtraParamter){
      logger.info(data);
      logger.info(myExtraParamter); --> this one shows an undefined

  })
  .on('end', function(data){
      logger.info("Reading all CSV file completed.");
  });

对于将数据传递到on事件的回调中的任何指示,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

正如您所说,您的要求是在node.js流的data事件上接收一个附加参数。

我们需要在这里澄清的是-我期望所描述的解决方案会带来很大的性能影响,但是我们所有人都处于外部库迫使我们退出明智的解决方案的境地。

为了实现您的目标,您需要重写node.js流处理data事件的方式-本质上,这将导致使用覆盖的{{1 }}方法。

EventEmitter.emit

该类将使您可以将任意数量的参数推送到使用方流。用法需要稍作修改,您已设置好:

const {PassThrough} = require("streams");

class DataExtender extends PassThrough {
    constructor(...extra) {
        this._extra = extra;
    }

    emit(ev, ...args) {
        if (ev === 'data') return super.emit(ev, ...this._extra, ...args);
        super.emit(ev, ...args);
    }

}