Использование тем RxJS | Кодементор

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

Субъекты, говоря простым языком, функционируют как Наблюдаемый и как Наблюдатель. Это дает им возможность проксировать значения, полученные от других Observables, в свой собственный список Observables, который он поддерживает в массиве с именем наблюдатели.

Субъекты подпадают под категорию наблюдаемых, обычно называемых Многоадресные наблюдаемые и чтобы лучше понять их, нам нужно знать, что существует два типа Observables, а именно:

  1. Холодные наблюдаемые :
  • Производитель стоимости создается внутри наблюдаемого.
  • За выполнением может быть только один наблюдатель, что делает их одноадресная передача.
  • Примеры таких включают интервал(), ajax().
  1. Горячие наблюдаемые :
  • Производитель ценности существует вне наблюдаемого. Он выдает значения независимо от того, есть ли наблюдатели или нет.
  • У них может быть общий производитель, который позволяет нескольким наблюдателям получать одни и те же значения одновременно, поскольку вызов подписываться() больше не является тем, что запускает наблюдаемое для начала отправки значений.
  • Они есть многоадресная рассылка.
  • Примеры таких включают Observables, которые оборачивают события DOM (например, _fromEvent) _и WebSockets.

Для многоадресной рассылки холодного наблюдаемого объекту, ведущему себя как горячему наблюдаемому, команда RxJS предоставила серию многоадресные операторыкоторые управляют всем процессом, например:

  • многоадресная передача ():
    • Он принимает тему в качестве параметра и использует ее за кулисами для управления многоадресной рассылкой.
    • Он возвращает специальный тип наблюдаемого, называемый Подключаемый Наблюдаемый, выполнение которого можно инициировать, вызвав метод соединять метод.
  • количество ссылок():
    • Он автоматически запускает выполнение исходного наблюдаемого, когда количество наблюдателей больше 0.
  • публиковать():
    • Это тонкая обертка о многоадресная передача () и не требует прохождения предмет как параметр. Это создаст предмет для вас внутри.
  • Поделиться():
    • Это похоже на совместное использование publish() и refCount(), потому что выполняется, когда количество наблюдателей больше 0.
    • Однако, в отличие от оператора публикации, он повторно подпишется на источник по мере необходимости, если количество наблюдателей снизится до 0, а затем снова превысит 0 по мере добавления новых наблюдателей.

Вот пример кода, демонстрирующий операторы многоадресной рассылки в действии с использованием публиковать() а также количество ссылок():

let source$ = interval(1000).pipe(
 take(4),
 publish(),
 refCount()
);

source$.subscribe(value => console.log(`Observer 1: ${value}`));
setTimeout(() => {
 source$.subscribe(value=>console.log(`Observer 2: ${value}`));
}, 1000);

setTimeout(() => {
 source$.subscribe(value=>console.log(`Observer 3: ${value}`));
}, 2000);

Типы предметов:

Асинк Тема:

Диаграмма, показанная ниже, представляет собой мраморную диаграмму, описывающую базовый подтип Субъекта, называемый АсинкСубъект, который является особым типом Subject, который выдает только последнее полученное значение. Этот тип Субъекта используется внутри опубликоватьпоследний() оператор, когда он применяется к наблюдаемому.

S.AsyncSubject.png

ПоведениеТема:

Еще одним особым типом субъекта является ПоведениеТема, которые настроены с начальным начальным значением и немедленно передают это значение наблюдателям, если источник еще не создал это значение. Если наблюдатель добавляется после того, как источник начал создавать значения, то он передаст новому наблюдателю самое последнее значение вместо начального значения. Оператор, который использует тип Subject внутри, называется опубликоватьПоведение(). Ниже представлена ​​мраморная диаграмма, описывающая BehaviourSubject:

S.BehaviorSubject.e

ReplaySubject :

Еще одним особым типом субъекта является ReplaySubject, который хранит и отправляет настраиваемое количество значений всем наблюдателям. Эти сохраненные значения по существу воспроизводятся и передаются всем новым наблюдателям. опубликоватьПовторить() оператор использует этот тип предмета внутри компании. Ниже приведена диаграмма, описывающая ReplaySubject:

S.ReplaySubject

Опубликовать Тему :

Опубликовать Тему испускает наблюдателям только те элементы, которые испускаются наблюдаемым источником после времени подписки. Обратите внимание, что PublishSubject может начать выдавать значения сразу после создания, поэтому существует риск потери одного или нескольких элементов в период между созданием Subject и подпиской на него наблюдателя. Если вам нужно гарантировать доставку всех элементов из исходного Observable, вам нужно либо сформировать этот Observable с помощью Создавать_()_, чтобы вы могли вручную повторно ввести «холодное» поведение Observable или вместо этого переключиться на использование ReplaySubject. Ниже представлена ​​мраморная диаграмма PublishSubject:

S.PublishSubject.e

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *