Когда уничтожать поток чтения и записи в Node.js - PullRequest
0 голосов
/ 30 марта 2020

Я работаю над базой 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;

Это правильный способ сделать это, обеспечивающий предсказуемое поведение? Любая помощь по этому вопросу будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...