2016-10-20 13 views
5

Kiedy mam wielu abonentów do jednego zaobserwowania, na przykład:Rxj jak się dowiedzieć, ile widzą obserwujący nas subskrybenci?

const myInterval = Rx.Observable.interval(500); 

const subscriptionOne = myInterval.subscribe(val => doSomething()); 
const subscriptionTwo = myInterval.subscribe(val => doSomething()); 

Skąd mogę wiedzieć, ilu abonentów nadal zarejestrować do myInterval zaobserwować? Potrzebuję tych informacji, na przykład do , aby zapobiec wyciekom pamięci w przypadku, gdy zapomniałem wypisać się z jednego z nich?

Odpowiedz

1

Używając kanciastego 2, powinieneś starać się używać rury asynchronicznej tak bardzo, jak to możliwe, ponieważ automatycznie anuluje to subskrypcję, gdy twój komponent zostanie zniszczony.

To powiedziawszy. Widziany tutaj twój interwał jest zimny. Oznacza to, że dla każdej subskrypcji zostanie utworzony producent wartości. Oznacza to, że za każdym razem tworzona jest nowa subskrypcja. Wiedząc, ile subskrypcji nadal masz do obserwowania w stanie zimnym, nie możesz odpowiedzieć.

Obawiam się, że jedyną rzeczą, którą możesz zrobić, to zarządzać swoimi subskrypcjami w czysty sposób i polegać na kanciastym, jak to tylko możliwe.

+0

I na przykład, jeśli używam w moim komponencie valueChanges.subscribe w formularzach? Muszę ręcznie anulować subskrypcję? –