Метод 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()