Я работаю над базой c JSON для синтаксического анализатора / модуля записи CSV для личного проекта, и мне интересно, когда подходящее время для уничтожения (или закрытия) потоков чтения и записи. Чтобы проверить свою функцию, я создал al oop, чтобы получить JSON файлы из моей файловой системы и преобразовать их в csv.
Вот код для моего l oop, за которым последует с кодом, связанным с потоком. Для справки заголовок - это просто массив строк, которые составляют столбцы для csv.
const jsonToCSV = require("./examples/json2csv");
const header = require("./header");
function main() {
const csvFiles = [];
for (let i = 1; i < 100; i++)
csvFiles.push(
jsonToCSV(header, {
in: `./data/customers${i}.json`,
out: `./data/csv/customers${i}.csv`
})
);
Promise.all(csvFiles)
.then(() => {
console.log("All csv files written successfully!");
})
.catch(err => console.log(err.message));
}
main();
В приведенном ниже коде функции я создал поток для чтения, записи и преобразования. Я думал, что когда поток записи будет закрыт, я уничтожу потоки чтения и записи.
const createWriteStream = require("fs").createWriteStream;
const createReadStream = require("fs").createReadStream;
const Transform = require("stream").Transform;
/**
* @function jsonToCSV
* @param {[string]} header
* @param {{ in: string, out: string }} paths
*/
function jsonToCSV(header, paths) {
return new Promise(resolve => {
const read = createReadStream(paths.in, {
encoding: "utf-8"
});
const transform = new Transform();
transform._transform = (chunk, _, done) => {
// fancy schmancy logic here...
done(null, rows);
};
const writer = createWriteStream(paths.out);
writer.on("open", () => {
writer.write(header.join(",") + "\n");
});
writer.on("close", () => {
read.destroy();
writer.destroy();
resolve();
});
read.pipe(transform).pipe(writer);
});
}
module.exports = jsonToCSV;
Это правильный способ сделать это, обеспечивающий предсказуемое поведение? Любая помощь по этому вопросу будет принята с благодарностью.