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.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы