2016-06-13 36 views
1

Ich muss auf 2 Observables warten, um eine Anfrage zu bearbeiten, deren Typen unterschiedlich sind, z.Wie kann ich auf 2 Observables mit unterschiedlichen Rückgabetypen warten?

observable1 = Observable.create((observer: Subscriber<Type1> => ...) 

und

observable2 = Observable.create((observer: Subscriber<Type2> => ...) 

Wie kann ich verschachtelte Abonnements vermeiden wie

observable1.subscribe(result1 => { 
    observable2.subscribe(result2 => { 
     ... 
     <do something with result1 and result2> 
     ... 
    } 
} 

I

versucht
observable1.concat(observable2).subscribe(result => ...) 

aber das scheint von beiden Observablen wiederum zu lesen.

ich entlang der Linien von

observable1<???>observable2.subscribe((result1, result2) => ...) 

denken, wie ich das tun kann?

Antwort

1

Sie haben Recht: concat liest der Reihe nach von den Observablen. Um „join“ sie (durch die Ordnungsposition), möchten Sie zip verwenden:

const a$ = Rx.Observable.just(1); 
const b$ = Rx.Observable.just(2); 

const combined$ = a$.zip(b$, (x, y) => ({ a: x, b: y })); 

const subscription = combined$.subscribe(x => console.log(x)); 

Beachten Sie, dass die Tatsache, dass die beiden Ströme von unterschiedlichen Typen sind keine Unannehmlichkeiten verursacht, wenn zip verwenden, als eine Funktion vorgesehen werden um einen neuen Wert aus den zwei "gezippten" Werten zu erzeugen.

+0

Danke, das ist genau das, was ich gesucht habe! –