Найти в Дзене

Observer, Observable, Subject и другие…

В Angular при работе с Reactive Extensions можно создавать отслеживаемые объекты и удобно ими управлять: создавать подписки и отправлять уведомления. Важно понимать как с этим работать и кто за что отвечает. Observer - это тот, кто уведомляет об изменении [методы next(value), error(obj), complete()]. Observable - это тот, на кого подписываются [метод subscribe(next, error, complete)]. Существует также классы, реализующие функциональность как Observer, так и Observable. Самым простым является класс Subject. Какие еще бывают Subject? У каждого Subject есть свои особенности, некоторые из них отображены в таблице. Золотым правилом при работе с Subject является использование только нужной способности в определенном месте: Данная заметка является вступительной, в которой разобраны самые базовые принципы. Подписывайтесь, чтобы не пропустить подробные разборы с примерами.

В Angular при работе с Reactive Extensions можно создавать отслеживаемые объекты и удобно ими управлять: создавать подписки и отправлять уведомления. Важно понимать как с этим работать и кто за что отвечает.

Observer - это тот, кто уведомляет об изменении [методы next(value), error(obj), complete()].
Observable - это тот, на кого подписываются [метод subscribe(next, error, complete)].

Существует также классы, реализующие функциональность как Observer, так и Observable. Самым простым является класс Subject.

Какие еще бывают Subject?

  • BehaviorSubject - это Subject с обязательным значением по умолчанию.
  • ReplaySubject - это Subject, при подписке на который будет получена вся история отправленных уведомлений.
  • AsyncSubject - это Subject, который сообщит значение только после выполнения [метод complete()].

У каждого Subject есть свои особенности, некоторые из них отображены в таблице.

Некоторые различия Subject
Некоторые различия Subject

Золотым правилом при работе с Subject является использование только нужной способности в определенном месте:

  • В места где нужно реагировать на изменения необходимо передавать Observable с помощью метода asObservable()
  • В места где нужно задать значение необходимо передавать Observer

Данная заметка является вступительной, в которой разобраны самые базовые принципы. Подписывайтесь, чтобы не пропустить подробные разборы с примерами.