2015-03-17 10 views
5

Mam ten przykład barebones nie zachowuje się tak jak oczekuję na podstawie documentation of rxjs. Oczekuję, że subskrypcje obu otrzymają wszystkie wartości.dlaczego druga subskrypcja nie otrzymuje żadnych wartości przy subskrybowaniu dwukrotnie, aby można było zaobserwować w rx 2.3?

Docs wspomnieć:

dwóch obserwatorów następnie zapisać się do tej sekwencji i wydrukowanie jej wartości. Zauważysz, że sekwencja jest resetowana dla każdego subskrybenta, w którym druga subskrypcja wznowi sekwencję od pierwszej wartości.

let s1 = rx.Observable.from([1, 2, 3, 4, 9, 11]) 

s1.subscribe(
    x => console.log(x), 
    x => console.log(x), 
    x => console.log('complete')) 

s1.subscribe(
    x => console.log(x), 
    x => console.log(x), 
    x => console.log('complete')) 

Jednak druga subskrypcja prostu loguje „kompletna”

Jak się okazuje przykład działa zgodnie z oczekiwaniami w rxjs 2.4, ale nie w 2.3. Czy ktoś wie, co się zmieniło? Nie mogę dostrzec go w the release notes

Oto jsfiddle z 2.3.20: fiddle

i tutaj jest jednym z 2.4.1: fiddle

+1

Po prostu brzmi jak błąd. Oni przechodzą i optymalizują kod i wygląda na to, że po prostu je zepsuł krótko. – Brandon

+0

aktualizowanie rx rozwiązało problem – Remko

Odpowiedz

2

To nie prawda zachowanie na zimno obserwowalne. Obserwowalny, który został utworzony z tablicy, jest możliwy do zaobserwowania na zimno i nie może współdzielić subskrypcji więcej niż jeden obserwator. W celu poprawnej pracy możesz przekształcić obserwowalny w gorący obserwowalny. Możesz przejrzeć tę dokumentację http://xgrommx.github.io/rx-book/content/observable/observable_instance_methods/publish.html. W twoim przypadku możesz użyć czegoś takiego: http://jsbin.com/mowaco/edit?js,console. Teraz obie subskrypcje działają równolegle.