2015-03-17 8 views
5

Ich habe dieses Barebones-Beispiel nicht so, wie ich es erwarte, basierend auf der documentation of rxjs. Ich würde erwarten, dass die Abonnements beide Werte erhalten.Warum erhält die zweite Subskription keine Werte, wenn sie zweimal in rx 2.3 abonniert wird?

Die docs erwähnen:

Zwei Beobachter dann zu dieser Sequenz abonnieren und seine Werte auszudrucken. Sie werden feststellen, dass die Sequenz für jeden Abonnenten zurückgesetzt wird, in dem die zweite Subskription die Sequenz vom ersten Wert aus neu startet.

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

jedoch das zweite Abonnement anmeldet nur 'vollständig'

Wie das Beispiel wie erwartet stellt sich heraus, arbeitet in rxjs 2.4, aber nicht in 2.3. Weiß jemand was sich geändert hat? Ich kann es nicht vor Ort in the release notes

Hier ist ein jsfiddle mit 2.3.20: fiddle

und hier ist man mit 2.4.1: fiddle

+1

Klingt einfach wie ein Fehler. Sie gehen durch und optimieren den Code und es hört sich so an, als hätten sie es kurz kaputt gemacht. – Brandon

+0

Aktualisierung rx das Problem behoben – Remko

Antwort

2

Das ist nicht richtig Verhalten für einen kalten beobachtbar. Ein Observable, das aus einem Array erstellt wurde, ist kalt beobachtbar und kann Abonnements nicht mehr teilen als an einem Beobachter. Für eine korrekte Arbeit können Sie Ihre Observable in eine heiße Observable verwandeln. Sie können sich diese Dokumentation ansehen http://xgrommx.github.io/rx-book/content/observable/observable_instance_methods/publish.html. In Ihrem Fall könnten Sie so etwas wie http://jsbin.com/mowaco/edit?js,console verwenden. Jetzt arbeiten beide Abonnements parallel.