Документация по этой теме разрежена, и трудно найти там "точку входа".
Какова семантика различных предметов RxJS?
Ответ 1
Семантика различается в зависимости от типа предметов. Я разделим их на два вида: ваниль (Rx.Subject) и предметы специального назначения (остальные три). Предметы специального назначения разделяют часть семантики ванильного субъекта с несколькими оговорками из-за их специализации (например, поведение завершения/повторного соединения).
семантика Vanilla Rx.Subject
-  Основные функции -  субъекты реализуют наблюдателя, наблюдаемый интерфейс (и одноразовый интерфейс, поскольку у них есть обработчик disposeна их прототипе). Это означает, среди прочего, следующее:-  интерфейс наблюдателя: onNext,onError,onCompleteметод
-  наблюдаемый интерфейс: subscribeметод
 
-  интерфейс наблюдателя: 
-  вы можете наложить объект на наблюдателя или на наблюдаемый, скрывая реализацию дополнительных интерфейсов (см. .asObserver()и.asObservable()) при необходимости
- субъект, являющийся наблюдаемым, вы можете подписаться на него несколькими наблюдателями. Затем это наблюдаемое передаст свои данные всем своим наблюдателям. Внутренне субъект поддерживает массив наблюдателей.
- субъект, являющийся наблюдателем, вы можете подписаться на любой наблюдаемый
- наблюдатель и наблюдаемый, которые составляют предмет, являющийся двумя разными объектами, вы можете использовать их независимо друг от друга, если это ваш прецедент.
-  disposeв тему будет отменить подписку на всех наблюдателей и опубликовать ресурсы.
- Субъекты не принимают планировщика, но предполагают, что вся сериализация и грамматическая корректность обрабатываются вызывающим объектом.
- Поведение объектов по умолчанию заключается в том, чтобы излучать синхронно их значения наблюдателям, , начиная с первого зарегистрированного наблюдателя до последнего. В большинстве случаев порядок не имеет значения, в других он будет.
 
-  субъекты реализуют наблюдателя, наблюдаемый интерфейс (и одноразовый интерфейс, поскольку у них есть обработчик 
Я цитирую ключевой аспект контракт и грамматику Rxjs:
Эта грамматика позволяет наблюдаемым последовательностям отправлять любое количество (0 и более) сообщений onNext в подписанный экземпляр наблюдателя, необязательно сопровождаемый единственным сообщением об успехе (onCompleted) или сбое (onError).
-  ванильный субъект (созданный с помощью new Rx.Subject()) реализует эту грамматику: когдаonCompletedвызывается один раз, все последующие вызовыonNextигнорируются. Второй вызовonCompletedна том же наблюдателе также игнорируется. Если наблюдатель подписывается на наблюдаемую сторону объекта, его обратный вызовonCompleteбудет немедленно вызван (http://jsfiddle.net/cLf6Lqsn/1/).-  Создание -  new Rx.Subject()
 
-  
 
-  
Возвращает объект, который связывает его наблюдателя с его наблюдаемым (jsfiddle). Этот пример взят из официальной документации и отображает, как использовать объекты в качестве прокси. Субъект подписывается на источник (наблюдатель), а также прослушивается наблюдателями (наблюдаемая сторона). Любой вызов onNext (сторона наблюдателя) приводит к тому, что наблюдаемая сторона вызывает onNext с тем же значением для каждого из своих наблюдателей.
-  Rx.Subject.create(observer, observable)
Создает объект из указанного наблюдателя и наблюдает. Эти два не обязательно связаны. Хороший пример можно увидеть в реализации Rx.Dom.fromWebSocket, который возвращает объект, используемый для отправки и приема данных из сокета. Сторона наблюдателя отправляет данные в сокет. Наблюдаемая сторона используется для прослушивания входящих данных из сокета. Кроме того, созданный таким образом объект не имеет метода dispose.
Специализированная семантика Rx.Subject
-  Эта reactivex.ioдокументация охватывает довольно большую часть семантики специализированных тем.
- Другие интересные моменты, которые следует упомянуть, относятся к поведению, прошедшему после завершения.
- Пример кода, описывающего поведение, приведен ниже для async, поведение, воспроизведение
Надеюсь, я не слишком сильно ошибался. Я буду рад, если вас исправит. Последнее примечание, это должно быть справедливо для RxJS v4.
Подробное объяснение поведения холодных/горячих наблюдаемых можно назвать: Горячие и холодные наблюдаемые: есть ли "горячие" и "холодные" операторы?
