我正在尝试构建一些流式处理组件管道,以将数据库表中的数据读入JSON到CSV转换器,并将结果读入ZIP存档中的文件。除了将数据写入CSV文件之外,它看起来还不错。这些文件总是空的,而我直接写到档案中的摘要文件就可以了。
我试图找出流是否在某个时刻被中断,但是数据似乎通过了管道的每个部分。
这是代码的基本部分:
//before:
//let archive: Archiver = create('zip');
//archive.pipe(fileWriterStream);
let archivePassThrough = new PassThrough();
archivePassThrough.on("data", (chunk) => {
this.logger.info("PT:" + chunk);
});
archive.append(archivePassThrough, { name: absTargetFile });
//Use pass through for piping db query results in converter
let dbPassThrough = new PassThrough();
dbPassThrough.on("data", (chunk) => {
this.logger.info(chunk);
});
//Convert JSON to CSV (stream)
let converterStream = new AsyncParser();
converterStream.fromInput(dbPassThrough).toOutput(archivePassThrough);
converterStream.processor.on("end", () => {
this.logger.info("Converting complete");
resolve(absTargetFile);
});
converterStream.processor.on("error", (err: any) => {
this.logger.info(err);
reject(err);
});
//Read data from result set
rs.setFetchSize(2048);
rs.createObjectStream().pipe(dbPassThrough)
.on('finish', function (){
if (!rs.closed) {
rs.close();
}
});
//afterwards:
//archive.finalize();
所示部分包装在Promise中,当处理完成时,Promise将得到解决。 写入所有文件后,将最终确定归档文件。 存档本身是使用FileWriterStream写入磁盘的。
知道我在做什么错吗?