Почему данные не записываются в файл?

Я пытаюсь создать файл с фиктивными данными. Поскольку файл будет огромным с 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 ответ

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()
Другие вопросы по тегам