Что такое подписки в RxJS и как Observables взаимодействуют с ними? - PullRequest
0 голосов
/ 24 августа 2018

Мне не очень понятно, как работают Observables и Subscription. В частности, как Observable и его Подписки обмениваются информацией.

Итак, чтобы задать явные вопросы:

  • Сохраняет ли Observable ссылки на свои подписки?
  • Содержит ли подписка ссылку на наблюдаемый объект, который ее создал?
  • Наблюдаемая "помещает" данные в свои подписки или подписка "опрашивает" свои наблюдаемые?
  • Как происходит обмен информацией?

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

A Subscription является результатом добавления Observer к Observable. Это объект, который можно использовать только для unsubscribe из этой наблюдаемой. В случае отказа от подписки Наблюдатель не получит никаких дополнительных выбросов.

Observer (который вы можете называть подпиской) - это то, что создается при вызове Observable.subscribe(next, error, complete). Вы получите Observer при реализации собственного Observable с Observable.create(). В противном случае, вы не получите его. Observer содержит функции next(value => void), error(error => void) и complete(_ => void), которые используются Observable для передачи сообщений об изменениях состояния.

Обмен информацией происходит только в одном направлении. The Observable всегда излучает Observer, а не наоборот.

Теперь на ваши вопросы:

Сохраняет ли Observable ссылки на свои подписки?

Нет, он хранит ссылки на свои Observers, но это, вероятно, то, что вы имеете в виду.

Содержит ли подписка ссылку на наблюдаемый объект, который ее создал?

Нет, только функция, которая используется для отмены подписки на эту заметку. Observer также не имеет ссылки на Observable, на которое он подписан.

Наблюдаемая "помещает" данные в свои подписки или подписка "опрашивает" свои наблюдаемые?

Наблюдаемые "помещает" (лучше слово "испускает") значения в свои Observers. никогда не опрашивается из Observable, так как это нарушит фундаментальный принцип RxJS. Единственным исключением будет BehaviourSubject.getValue(), но вы не должны использовать это в большинстве случаев!

Как происходит обмен информацией?

Это зависит от наблюдаемого. Как правило, Observable содержит список всех своих Observers и вызывает их функции next() всякий раз, когда выдается новое значение, функцию error() при возникновении ошибки и функцию complete(), когда она достигает своего состояния завершенности. .

0 голосов
/ 24 августа 2018

По сути, ваш вопрос относится к более общей схеме наблюдения, вот хорошая статья об этом в JS пример или более общее использование пример вы получите все свои ответы.

...