2015-02-04 8 views
6

Sagen wir, ich habe zwei Observablen und einen Ich möchte auf Änderungen in einer beobachtbaren hören, wenn der andere eine bestimmte Bedingung erfüllt. Ich habe es mit zip versucht, aber es scheint, ich werde nur benachrichtigt, wenn beide Observablen ändern, aber ich möchte für jede Änderung auf dem einen beobachtbaren benachrichtigt werden, wenn der Zustand des anderen wahr ist.RxJS: Wie kann ich ein "wenn" mit Observablen machen?

Was ich versucht:

var firstState = new Rx.BehaviorSubject(undefined); 
var secondState = new Rx.BehaviorSubject(undefined); 

Rx.Observable.zip(firstState, secondState, function (first, second) { 
    return { 
    first: first, 
    second: second 
    } 
}).filter(function (value) { 
    return value.first !== undefined; 
}).subscribe(function (value) { 
    // do something with value.second 
}); 

ich bemerkte, dass es eine Rx.Observable.if ist, aber ich konnte nicht zum Laufen bekommen.

Antwort

7

Verwendung pausable:

secondState 
    .pausable(firstState.map(function (s) { return s !== undefined; })) 
    .subscribe(function (second) { 
     // only occurs when first is truthy 
    }); 
+1

Das ist fantastisch! – Pipo

0

Zip bedeutet buchstäblich so. Es reißt auf und nimmt entsprechende Elemente in zwei verschiedenen Sequenzen. Was Sie erreichen möchten, kann auf viele verschiedene Arten erfolgen.

firstState.combineLatest(secondState, function(f, d) { 
 
    return f == 10 && d > 10; 
 
}).filter(function(val) { return val }) 
 
    .subscribe(function(v) { console.log(v); }); 
 

 
firstState.onNext(10); 
 
secondState.onNext(20);

Dies ist eine der Möglichkeiten ist.

+0

Vielen Dank für Ihre Antwort, aber ich akzeptierte Brandons zu beantworten, weil es mein Problem passt noch besser. – Pipo

Verwandte Themen