2017-08-21 8 views
1

Ich habe zwei Observables vom Typ boolean. Ich möchte sie zippen, damit das Endergebnis wahr ist, wenn einer von beiden wahr ist.Zip für jeden Ausgang

Rx.Observable.zip(firstBooleanSource$, SecondBooleanSource$) 
    .map((results: boolean[]) => results.some((result:boolean)=>result)) 
    .subscribe((status: boolean)=> console.log(status)); 

..

----FALSE----------- 
----FALSE---TRUE---- 

in Folge hat

----FALSE---- 

Erwartet:

----FALSE----TRUE---- 
+1

Sie so etwas wie dies So abbilden wollen ' Rx.Observable.merge (firstBooleanSource $, SecondBooleanSource $). Filter (Boolean) .subscribe (...) '? – martin

+0

^So werde ich nie wissen, wenn beide falsch sind. Wenn ich 'filter' entferne, ist, wenn der erste wahr ist, der zweite falsch, er nimmt das zweite Ergebnis an und zeigt false an. Dabei sollte es sich tatsächlich zeigen. JSBIN: https://jsbin.com/hekupemuye/edit?html,js,console,output – Skeptor

Antwort

2

Sie müssen den combineLatest Betreiber, so dass es die Werte kombiniert, so dass Sie es auf das richtige Ergebnis

1

Ich glaube, Sie zu zip Funktion zu übergeben müssen, die Ihre Observables fusionieren . Nach Dokumentation:

zip akzeptiert eine variable Anzahl von Observablen oder Zusagen als Parameter, die durch eine Funktion folgt, die eine Position von jeder dieser Observablen oder gelöst, indem diese Versprechen als Eingabe und erzeugt ein einzelnes Element emittiert akzeptiert werden emittiert von der resultierenden Observable.

So können Sie Ihren Code wie folgt aussehen:

Rx.Observable.zip(
    firstBooleanSource$, SecondBooleanSource$, 
    (first,second) => first && second) 
.subscribe((status: boolean) => console.log(status));` 
+0

Das ist eine bessere Syntax als das, was ich geschrieben habe, aber es hat mein Problem nicht gelöst. Bin: https://jsbin.com/pitenucosi/edit?js,console,output – Skeptor