2015-06-07 11 views

Odpowiedz

11

Nie ma praktyczna różnica, jeśli spojrzeć na „observable.prototype.share” widać, że po prostu zwraca „source.publish(). RefCount()”.

Co do dlaczego nie chcesz go używać, to jest bardziej kwestia ile kontroli trzeba się gdy źródło rozpocznie nadawanie.

Po tym, jak refCount() połączy podstawową obserwowalną przy pierwszej subskrypcji, może się zdarzyć, że kolejni obserwatorzy przegapią wiadomości przychodzące, zanim będą mogły zasubskrybować.

Na przykład:

var source = Rx.Observable.range(0, 5).share(); 

var sub1 = source.subscribe(x => console.log("Observer 1: " + x)); 
var sub2 = source.subscribe(x => console.log("Observer 2: " + x)); 

Tylko pierwszy abonent otrzyma żadnych wartości, jeśli chcemy zarówno otrzymać je będziemy używać:

var source = Rx.Observable.range(0, 5).publish(); 

var sub1 = source.subscribe(x => console.log("Observer 1: " + x)); 
var sub2 = source.subscribe(x => console.log("Observer 2: " + x)); 

source.connect(); 
+5

z rxjs 5 jest różnica między tymi dwoma zastosowań operatora. Zobacz [ten problem] (https://github.com/ReactiveX/RxJS/issues/1363) Opublikowałem na repozytorium rxjs 5, aby uzyskać szczegółowe wyjaśnienie różnic. – Christian

+0

Urgh, tak, pamiętam, że to czytałem. Chyba będę musiał edytować. – paulpdaniels

+1

@Christian Jestem obecnie z problemem w aplikacji Angular2. Mam 'obserwowalne' z żądania http z wieloma' obserwatorami'. Narzędzia programistyczne w mojej przeglądarce rejestrują około 750 żądań dotyczących zadania. Kiedy zmienić 'udział()' na 'publish.refCount()' istnieją tylko 50 wnioski wyjechał do tego samego zadania. Wydaje się więc, że 'share()' nie robi tego, co powinno (podziel się 'Observable'). – Springrbua