В RxJS почему канал запускается один раз для каждой подписки? - PullRequest
0 голосов
/ 18 октября 2018

Я хочу иметь несколько подписок, чтобы реагировать на наблюдаемое событие, но я также хочу зарегистрировать событие, поэтому я передаю его через оператора do(), в котором я веду запись.

проблема в том, что событие регистрируется один раз для каждой из создаваемых мной подписок!

Сейчас я обхожу это путем создания Subject и вызова next для него из обратного вызова события, чтопозволяет мне зарегистрировать событие один раз и вызвать несколько подписок.

Вот код, демонстрирующий проблему: https://stackblitz.com/edit/rxjs-xerurd

У меня такое ощущение, что я что-то упустил, не так ли?Есть ли более "RxJS" способ сделать это?

РЕДАКТИРОВАТЬ:

Я не спрашиваю о разнице между наблюдаемой горячей и холодной, на самом деле я использовал наблюдаемую горячую -созданный fromEvent(), и ему было интересно, почему мой предположительно горячий источник событий ведет себя так, будто он холодный.

Теперь я понимаю - после прочтения share() - что pipe() "поворачивает" ваш наблюдаемый холод, то есть возвращает холод, основанный на вашем источнике (который может быть холодным, может быть горячим)

1 Ответ

0 голосов
/ 18 октября 2018

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

Если вы хотите, чтобы побочный эффект был выполнен только один раз - вы можете поделиться подпиской, передав одну подписку нескольким подписчикам.Для этого вы можете использовать share, shareReplay и т. Д.

Чтобы лучше понять, как это работает, что такое "холодный" и опубликовать, обратитесь к документации RxJS v4:

4.8 Используйте оператор публикации для обмена побочными эффектами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...