Прежде чем мы начнем, эта статья требует базовых знаний в Rx.

Допустим, у нас есть две наблюдаемые:

Каждый раз, когда мы вызываем subscribe с новым наблюдателем, мы создаем новое выполнение. Вы можете думать об этом как о нормальной функции, которая выполняется дважды. Например:

Мы создаем два независимых друг от друга интервала. Но что, если нам нужен второй наблюдатель, чтобы получить те же события, что и у первого?

Это тот случай, когда вам нужно будет использовать Subject в Rx.

Что такое предметы?

Субъект одновременно является наблюдаемым и наблюдателем.

  1. Наблюдатель - имеет методы next, error и complete.
  2. Observable - в нем есть все наблюдаемые операторы, и вы можете подписаться на него.

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

Давайте посмотрим, как мы можем разделить одно и то же выполнение в нашем первом примере:

Сначала мы создаем новую тему. Теперь помните, что субъект также является наблюдателем, и что могут делать наблюдатели? Они могут прослушивать наблюдаемые с помощью методов next(), error() и complete(). Если вы зарегистрируете тему, вы увидите, что у нее есть эти методы.

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

А теперь перейдем к следующей части.

Объект также является наблюдаемым, а что мы можем сделать с наблюдаемыми? Мы можем подписаться на них.

В нашем случае мы подписываемся на тему. Но какие ценности дает нам этот предмет?

Если вы помните, что субъект наблюдает за interval наблюдаемым, поэтому каждый раз, когда interval отправляют значения субъекту, субъект отправляет эти значения всем своим наблюдателям.

Субъект действует как прокси / мост, и поэтому выполняется только одно выполнение.

О, я получил новое значение из наблюдаемого интервала, я передаю это значение всем своим наблюдателям (слушателям)

Не забывайте, что каждый субъект также является наблюдателем, поэтому мы можем использовать методы наблюдателя next(), error(), complete(). Давайте посмотрим на пример:

Мы можем подписаться на тему и вручную запустить next() method. Когда вы вызываете метод next(), каждый подписчик получит это значение. (вы также можете запускать error() и complete())

Мы узнали о простейшем предмете в Rx. Более типы субъектов могут решать более сложные ситуации, BehaviorSubject, AsyncSubject и ReplaySubject.

Самый распространенный - BehaviorSubject, о нем вы можете прочитать в моей последней статье.

Что нельзя пропустить:





Подпишитесь на меня в Medium или Twitter, чтобы узнать больше об Angular, Vue и JS!