Добрый день,
есть
Readable Stream
class MyReader extends Readable {
current = 0;
max = 100;
_read(size) {
this.current++;
if (this.current >= this.max) {
this.push(null);
} else {
const buffer = Buffer.from(`${this.current}`, 'utf8');
const couldBeAdded= this.push(buffer);
console.log(`push: ${this.current}, done: ${couldBeAdded}`);
}
}
}
Так же есть
Writable Streamclass MyWriter extends Writable {
_write(chunk, encoding, done) {
setTimeout(() => {
console.log(`chunk: ${chunk.toString()}`);
done(); // торможу запись
}, 100);
}
}
Передаю ему Writable Stream:
const read = new MyReader({ highWaterMark: 4 });
const write = new MyWriter({ highWaterMark: 4 });
read.pipe(write);
В итоге в консоле на 10 итерации (когда пытаюсь запушить в стрим 10) read.push() возвращает false, это значит что буффер полон, и дальнейшие куски будут заполнять память.
При read.push() - false,
буффер Readable стрима полон, но
pipe не ставит на паузу чтение, и не ждет освобождения буффера, почему?
В обратной ситуации, когда Writable Buffer полон, pipe ставит на паузу чтение, тут все понятно