2015-03-17 11 views
5

Ho questo esempio di barebone che non si comporta come mi aspetto basato sullo documentation of rxjs. Mi aspetto che gli abbonamenti ricevano entrambi tutti i valori.perché la seconda sottoscrizione non riceve alcun valore quando si sottoscrive due volte per essere osservabili in rx 2.3?

La documentazione menzionano:

due osservatori quindi abbonarsi a questa sequenza e stampare i suoi valori. Si noterà che la sequenza viene reimpostata per ciascun sottoscrittore, in cui la seconda sottoscrizione riavvia la sequenza dal primo valore.

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')) 

Tuttavia, il secondo abbonamento registra solo 'completa'

Come si è visto l'esempio funziona come previsto in rxjs 2.4, ma non in 2.3. Qualcuno sa cosa è cambiato? Non può individuare in the release notes

Ecco un jsfiddle con 2.3.20: fiddle

e qui è uno con 2.4.1: fiddle

+1

Sembra proprio un bug. Stanno passando e ottimizzando il codice e sembra che l'abbiano appena rotto. – Brandon

+0

aggiornamento rx risolto il problema – Remko

risposta

2

Questo comportamento non giusto per un osservabile freddo. Un osservabile creato da un array è osservabile a freddo e non può condividere l'abbonamento più che con un osservatore. Per un lavoro corretto puoi trasformare il tuo osservabile in un osservabile caldo. Puoi consultare questa documentazione http://xgrommx.github.io/rx-book/content/observable/observable_instance_methods/publish.html. Nel tuo caso potresti usare qualcosa come questo http://jsbin.com/mowaco/edit?js,console. Ora entrambe le sottoscrizioni funzionano in parallelo.

Problemi correlati