2016-09-23 12 views
0

Angenommen, ich habe eine Komponente, die zwei Observablen muss dessen Inhalt machen:Angular 2 - Acting auf zwei BehaviorSubject/Observable

this.manifest.subscribe((a) => { 
    f(a, b) 
}) 

this.route.params.subscribe((b) => { 
    f(a, b) 
}) 

Was die richtige Winkel/rxjs Weg ist f() zu nennen einmal a ankommt, und/oder rufen Sie es erneut einmal b (zB Update auf Routing-Parameter) an.

Natürlich konnte ich manuell a und b im Auge behalten, aber das sieht hässlich und nicht elegant aus. Gibt es einen angularer Weg?

Antwort

3

Sie können combineLatest verwenden, um die beiden Streams zusammenzuführen und jedes Mal zu feuern, wenn einer von ihnen ausgelöst wird.

Rx.Observable.combineLatest(this.manifest, this.route.params, (a, b) => f(a, b)) 
    .subscribe(c => /*Do something with the result of f(a,b)*/ 

Beachten Sie, dass die oben feuert nur, wenn es mindestens einen Wert von jeder Quelle hat, aber ich glaube nicht, dass ein Problem sein sollte, wenn Ihre Quellen BehaviorSubjects

0

sind Wenn Sie zwei Observablen müssen nacheinander lösen, sollten Sie in Betracht ziehen Observable.concat(obs1, obs2).

Wenn Sie die verkettete Observable abonnieren, wird zuerst obs1 und dann obs2 abonniert.

Verwandte Themen