2016-10-20 1 views
8

J'essaie d'utiliser Observable.forkJoin et le gestionnaire d'abonnement ne reçoit jamais de hit. L'opérateur forkJoin travaille pour moi dans d'autres parties de mon application et la seule différence que je peux penser dans le scénario non fonctionnel est que les observables sont créés à partir d'objets BehaviorSubject en utilisant sa fonction asObservable().Les observables angulaires 2 rxjs créés à partir de BehaviorSubject ne fonctionnent pas avec forkJoin

Cette souscription se fait frapper

let obs = Observable.of(1); 

    Observable.forkJoin(
     obs 
    ).subscribe(data => { 
     console.log(data); 
    }); 

Celui-ci ne

let bs = new BehaviorSubject<number>(1); 
    let obs = bs.asObservable(); 

    Observable.forkJoin(
     obs 
    ).subscribe(data => { 
     console.log(data); 
    }); 

Bien sûr, il y a plus d'un obseravble dans mon vrai cas d'utilisation qui est la raison pour laquelle j'utilise forkJoin dans le premier endroit.

Existe-t-il autre chose qui doit être fait pour BehaviorSubject pour le faire fonctionner avec forkJoin?

MISE À JOUR:

Après avoir étudié les documents RxJs un peu plus je réalisais que la Observable.combineLatest était beaucoup mieux adapté à mon besoin de forkJoin ... Lien ici au cas où vient dans ce SO message: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-combineLatest

Répondre

6

Le problème est que forkJoin joint les observables quand ils se terminent.

Dans votre premier extrait, vous créez une observable à l'aide de of - qui, après subscribe, émet immédiatement une valeur, puis se termine.

Dans votre deuxième extrait, le BehaviorSubject ne se termine pas. Si vous deviez appeler complete, vous verriez la valeur enregistrée à la console:

let bs = new BehaviorSubject<number>(1); 
let obs = bs.asObservable(); 

Observable.forkJoin(
    obs 
).subscribe(data => { 
    console.log(data); 
}); 

bs.complete(); 
+3

Merci pour la réponse. Après avoir enquêté un peu plus sur les docs de RxJs, je me suis rendu compte que 'Observable.combineLatest' était bien mieux adapté à mes besoins que' forkJoin' ... Lien ici au cas où il y aurait un message SO: http://reactivex.io/ rxjs/class/es6/Observable.js ~ Observable.html # static-method-combineLatest – cboston