Basic

How it works
Readable streams

Всего существует 2 основных состояния: поток и пауза.

Пауза - нужно явно вызывать stream.Read() для чтения данных из стрима в таком состоянии.

Поток - данные считываются автоматически, предоставляется в приложение максимально быстро.

По-умолчанию. стрим начинается в режиме паузы, но могут быть переключены в режим потока одним из следующих способов:

  • Добавление обработчика событий 'data'
  • Вызов метода resume
  • Вызов метода pipe - для отправки данных в открытый для чтения стрим

Стрим можно переключить в режим паузы:

  • Если нет назначений pipe -> метод stream.Pause()
  • Если есть назначения pipe -> удалением любых обработчиков события 'data' и удалением всех назначений pipe вызовом метода unpipe()

! Открытый для чтения stream не будет генерировать данные пока есть механизм получения / игнорирования для этих данных. Если потребляющий механизм отключен, стрим будет предпринимать попытки остановить генерацию данных.

  • При этом, удаление обработчика событий 'data' не будет автоматически приостанавливать stream.
  • Если есть pipe, вызов stream.pause() не будет гарантией, что стрим останется приостановленным после очищения от этих назначений и запроса новых данных.

Принцип работы

В любой заданной точке каждый открытый stream имеет 3 возможных состояния:

flowing = null / false / true

flowing = null -> не предоставляется никакого механизма для получения данных из стрима и он генерирует данные.

flowing = true -> открытый для чтения stream активно генерирует события в связи с генерацией данных. Вызывает добавление слушателя к событию 'data', вызов метода pipe, вызов resume.

flowing = false -> временно останавливает поток событий, но не останавливает генерацию данных (могут быть собраны во внутреннем стриме буфера). Вызывает pause(), unpipe() или получение противодействия.

Promise

Interface

Interfaice Initial Resolved Rejected
then Promise will call all assosiated thenblocks and execute code with passed resolved data will not be called
catch Promise will not be called will call assosiated catch block and execute code with passed exception
finally Promise will call assosiated finally block and execute code with passed resolved data will call assosiated catch block and execute code with not defined data

Initial -> Resolved Initial -> Rejected
All assosiated then blocks will be called and resolved data will be based into it. Finally block will be called and execute code with passed resolved data. catch block will be called with error description inside. Finally block will be called and execute code with passed underfined arg.
Stream

Interface

Writable

Events Definition When appeared
close Генерируется, когда стрим и любой из его предустановленных ресурсов закрываются. Никакие события больше не генерируются, и не осуществляются расчеты. стрим закрывается
drain Событие генерируется, когда нужно восстановить запись данных в стрим. stream.write - возвращает false
error Слушатель функции обратного вызова передает единственный аргумент Error при вызове. error возникает в момент записи данных из пайпа. Стрим не закрывается, когда генерируется событие ‘error’.
finish Генерируется после вызова метода stream.end() и после того, как все данные были сброшены в предустановленную систему.
pipe stream.Readable источниковый стрим, который передается в открытый для записи Генерируется, когда вызывается метод stream.pipe() на открытом для чтения стриме, добавляя открытый для записи стрим в настройки направления.
unpine Открытый для чтения стрим Источниковый стрим, который не передает открытый для записи Генерируется, когда метод stream.unpipe() вызывается на открытом для чтения стриме, удаляя открытый для записи стрим из настроек направления.

Readable

Events Definition When appeared
close Генерируется, когда стрим и любой из его предустановленных ресурсов закрываются. Событие показывает, что никакие события больше не генерируются, и не осуществляются расчеты. ! Не все открытые для чтения стримы генерируют событие ‘close’. стрим закрывается
data Генерируется всякий раз, когда стрим уступает владение порцией данных потребителю. Добавление слушателя события ‘data’ в стрим, который не был явно приостановлен, переключает стрим в режим потока. Данные будут передаваться тогда, когда это снова станет возможным. Стрим переключается в режим потока путем вызова readable.pipe(), readable.resume() или добавления слушателя функции обратного вызова в событие ‘data’. Событие генерируется, когда вызывается метод readable.read() и порция данных доступна для возвращения
end Генерируется, когда получателю не доступны данные из стрима. Событие не будет генерироваться пока данные не полностью получены. Это можно обойти, если переключить стрим в режим потока или вызвать с повторением stream.read() пока все данные не будут получены.
error Генерируется реализацией открытого для чтения стрима в любое время. Слушатель функции обратного вызова будет передавать единственный объект Error. Предустановленный стрим не может сгенерировать данные по причине внутренней ошибки или если реализация стрима пытается передать недопустимую порцию данных.
readable Генерируется, когда есть доступные данные для чтения из стрима, после получения данных из стрима, но перед генерацией события ‘end’. ! Обычно механизмы событий readable.pipe() и ‘data’ более предпочтительны для использования, чем событие ‘readable’. В первом случае stream.read() возвращает доступные данные. В последнем – stream.read() возвращает null.

Duplex

Has both interfaces: Readable and Writable.

Transform

Has both interfaces: Readable and Writable.

results matching ""

    No results matching ""