csv 如何等待可写流结束Nodejs

qlzsbp2j  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(88)

我想把下面的代码 Package 在asyn函数中,并等待内容写入文件:

const fs = require("fs");
const { stringify } = require("csv-stringify");
const db = require("./db");
const filename = "saved_from_db.csv";
const writableStream = fs.createWriteStream(filename);

const columns = [
  "year_month",
  "month_of_release",
  "passenger_type",
  "direction",
  "sex",
  "age",
  "estimate",
];

const stringifier = stringify({ header: true, columns: columns });
db.each(`select * from migration`, (error, row) => {
  if (error) {
    return console.log(error.message);
  }
  stringifier.write(row);
});
stringifier.pipe(writableStream);
console.log("Finished writing data");

当内容写入文件时,函数必须解析。但我怎么能检测到那个事件呢?我在stringifierwritableStream上都添加了事件侦听器,但没有调用

stringifier.on('close', ()=> console.log( `STR CLOSED`))
  stringifier.on('finish', ()=> console.log( `STR FINISH`))
  writableStream.on('close', ()=> console.log( `WS CLOSED`))
  writableStream.on('finish', ()=> console.log( `WS FINISH`))

这里的例子

pieyvz9o

pieyvz9o1#

捕获管道,然后监听其上的finish事件:

await new Promise((resolve, reject) => {

  //...all your code here...

  const stream = stringifier.pipe(writableStream);
  stream.on('finish', resolve);
});

相关问题