Выбор ответа Middle Потоки и буферы спрашивают часто обновлено

write() вернул false

Вопрос

Что означает false, который вернул writable.write(chunk)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Буфер превысил highWaterMark: ждать события drain. Это сигнал backpressure.

Варианты ответа

  1. Запись не удалась, чанк потерян и не попал во внутренний буфер
  2. Буфер превысил highWaterMark: ждать события drainправильный ответ
  3. Поток закрыт, писать больше нельзя без cork
  4. Чанк слишком большой, его надо разбить на части

Разбор

Это сигнал backpressure. Чанк принят и лежит в буфере, но буфер уже больше highWaterMark. Если продолжать писать, данные будут копиться в памяти. Правильно остановиться и ждать drain.

  • Данные не потеряны.
  • Запись в закрытый поток даёт ошибку ERR_STREAM_WRITE_AFTER_END, а не false.
  • Размер чанка не ограничен highWaterMark, это лишь порог сигнала.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.