alex4answ
@alex4answ

Почему Stream buffer не заполняется?

Добрый день, изучаю потоки, никак не могу выполнить сценарий "буфер полный, нужно очистить" в Writable стриме

вот что делаю:
const { Writable } = require('stream');

class Counter extends Writable {
  _write(chunk, encoding, next) {
    console.log(chunk.toString());
    next();
  }
}

const counter = new Counter({ highWaterMark: 2 }); // Размер буффера 2 байта

for(let i = 0; i < 1000; i++) {
  const buffer     = Buffer.from(`${i}`, 'utf8');
  const canWrite = counter.write(buffer); // всегда true, даже пробовал рандомный текст вставлять
}


В документации написано:
Returns: false if the stream wishes for the calling code to wait for the 'drain' event to be emitted before continuing to write additional data; otherwise true.


Буффер полный, ждет отчистки, но метод write возвращает всегда true, почему, где я ошибся?

UPD. я так понимаю что вызывая next() в методе _write(), я сигнализирую об успешной записи данных и буфер чистится, я прав?
  • Вопрос задан
  • 27 просмотров
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
я так понимаю что вызывая next() в методе _write(), я сигнализирую об успешной записи данных и буфер чистится, я прав?


да:
The callback function must be called synchronously inside of writable._write() or asynchronously (i.e. different tick) to signal either that the write completed successfully or failed with an error.

All calls to writable.write() that occur between the time writable._write() is called and the callback is called will cause the written data to be buffered.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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