Почему данные не записываются в файл? - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь создать файл с фиктивными данными.Поскольку файл будет огромным с 32 ^ 5 точками данных, я использовал поток записи.Но я не вижу никаких данных, записываемых в файл.Что может быть причиной этого?

const faker = require('faker');
const fs = require('fs');
const os = require('os');

const MAX_DATA_POINTS = Math.pow(32, 5)

const stream = fs.createWriteStream('sample-data.csv', { flags : 'a' });

for(let i = 0; i < MAX_DATA_POINTS; i++) {
        console.log(i)
        stream.write(`${faker.name.findName()}, ${i} ${os.EOL}`);
}

console.log(`Written ${MAX_DATA_POINTS} .. `);

1 Ответ

0 голосов
/ 24 апреля 2019

Метод write возвращает false, если поток желает, чтобы вызывающий код ждал, пока событие канавка не будет отправлено, прежде чем продолжить запись дополнительных данных, в противном случае - значение true.,Вполне возможно, что поток не сливается, и вызовы write() являются просто буферизацией фрагментов и возвращением false .

Вам нужно будет дождаться, пока все буферизованные куски будут слиты (приняты для доставки операционной системой).Когда это произойдет, событие утечки будет отправлено.

Примечание: Рекомендуется, чтобы после того, как write () вернул false, больше не будет записываться чанков, пока не будет сгенерировано событие «слив».

Вы можете изменить код создателя файла dummy-csv так, как я указал.

const faker = require('faker');
const fs = require('fs');
const os = require('os');

const MAX_DATA_POINTS = Math.pow(32, 5);
let c = 0;

const stream = fs.createWriteStream('sample-data.csv', { flags : 'a' });

function write() {

    let ok = true;
    do {
        c++;
        ok = stream.write(`${faker.name.findName()}, ${c} ${os.EOL}`);
    } while (c < MAX_DATA_POINTS && ok);

    if(c < MAX_DATA_POINTS) {
        stream.once('drain', write)
    }

}


write()
...