gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:52 24 4
gpt4 key购买 nike

目前,我正在尝试向 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.");
});

如果您能提供有关如何将数据传递到事件回调中的指示,我将不胜感激。

最佳答案

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

我们需要在这里澄清的是 - 我预计所描述的解决方案会对性能产生相当大的影响,但我们都遇到过外部库迫使我们放弃明智的解决方案的情况。

为了实现您的目标,您需要重写 node.js 流处理 data 事件的方式 - 这本质上会导致扩展 PassThrough使用重写的 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);
}

}

此类将允许您将任意数量的参数推送到消费流。用法需要稍作修改,您就可以了:

fs.createReadStream(values[i], {start: 118})
.pipe(fastCSV())
.pipe(new DataExtender("extraParam1", "extraParam2")) // you set those on "pipe"
.on('data', function(data, myExtraParamter, myOtherParamter) { // you get those on "data"
logger.info(data);
logger.info(myExtraParamter); // --> this won't show undefined anymore.
})
.on('end', function(data) { // BTW: data will be undefined here...
logger.info("Reading all CSV file completed.");
});

关于node.js - 在数据事件上将额外参数传递给 fs.createReadStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51141532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com