Angular / RxJS: Должен ли я поместить все мои Подписки в уникальную функцию или метод моего Сервиса? - PullRequest
0 голосов
/ 29 апреля 2018

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

До сих пор я думал, что этот код был выполнен только один раз (первый), а затем он остался в памяти, чтобы вызываться, например, событиями .next ().

Значит ли это, что было бы логично сконцентрировать все мои инструкции .subscribe () на одной «функции реестра», которая выполняется только один раз?

Бесконечные копии моих подписок создаются в памяти без моего ведома?

Мне не нужен ответ «зависит от типа подписчика», потому что я не думаю, что как программисты мы должны знать реализацию каждого внешнего ресурса, который мы используем ... Я нахожу самый безопасный и надежный способ делаю это всегда.

Заранее спасибо.

1 Ответ

0 голосов
/ 29 апреля 2018

Каждая подписка на ваш наблюдаемый создает свой собственный контекст выполнения.

// one execution context created    
yourObservable.subscribe(x=>{})


// another execution context created
yourObservable.subscribe(x=>{})

Если вам не нужен каждый контекст выполнения для каждой подписки, вам нужно share():

yourSharedObservable = yourObservable.share();

//only one execution context
yourSharedObservable.subscribe(x=>{})
yourSharedObservable.subscribe(x=>{})

Если вы хотите, чтобы yourSharedObservable кэшировал данные и делился ими со всеми подписчиками, вы можете shareReplay():

yourSharedAndCachedObservable = yourObservable.shareReplay(1);
...