2015-03-17 3 views
5

J'ai cet exemple de barebones ne se comporte pas comme je m'attends basé sur le documentation of rxjs. Je m'attendrais à ce que les abonnements aux deux reçoivent toutes les valeurs.Pourquoi le deuxième abonnement ne reçoit-il pas de valeurs lorsqu'il s'abonne deux fois pour être visible dans rx 2.3?

Les documents mentionnent:

Deux observateurs souscrivent ensuite à cette séquence et imprimer ses valeurs. Vous remarquerez que la séquence est réinitialisée pour chaque abonné, dans lequel le second abonnement va redémarrer la séquence à partir de la première valeur.

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

Cependant, le deuxième abonnement se connecte tout simplement « complet »

Il se trouve que l'exemple fonctionne comme prévu dans rxjs 2.4, mais pas en 2.3. Est-ce que quelqu'un sait ce qui a changé? Je ne peux pas le repérer dans the release notes

Voici un jsFiddle avec 2.3.20: fiddle

et voici un avec 2.4.1: fiddle

+1

Cela ressemble à un bug. Ils passent en revue et optimisent le code et il semble qu'ils l'ont cassé brièvement. – Brandon

+0

La mise à jour de rx a résolu le problème – Remko

Répondre

2

Ce comportement ne convient pas à un observable froid. Une observable créée à partir d'un tableau est observable à froid et ne peut partager plus d'abonnement que sur un observateur. Pour un travail correct, vous pouvez transformer votre observable en un observable à chaud. Vous pouvez regarder cette documentation http://xgrommx.github.io/rx-book/content/observable/observable_instance_methods/publish.html. Dans votre cas, vous pouvez utiliser quelque chose comme ceci http://jsbin.com/mowaco/edit?js,console. Maintenant, les deux abonnements fonctionnent en parallèle.