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(), я сигнализирую об успешной записи данных и буфер чистится, я прав?
  • Вопрос задан
  • 21 просмотр
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 80 000 до 120 000 ₽
Яндекс Москва
от 100 000 до 300 000 ₽
Яндекс Санкт-Петербург
от 100 000 до 300 000 ₽
21 сент. 2020, в 13:08
5000 руб./за проект
21 сент. 2020, в 13:04
25000 руб./за проект
21 сент. 2020, в 12:51
3000 руб./за проект