Задать вопрос
alex4answ
@alex4answ

Почему pipe продолжает читать из Readable Stream если буффер полон?

Добрый день,
есть
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 Stream
class 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 ставит на паузу чтение, тут все понятно
  • Вопрос задан
  • 33 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы