javascript - RxJS: Hvordan kan jeg gjøre en "if" med Observables?
Si at jeg har to observabler, og jeg vil lytte på endringer i én observabel, hvis den andre oppfyller en viss betingelse. Jeg prøvde det med zip, men det ser ut til at jeg bare blir varslet hvis begge observablene endres, men jeg vil bli varslet for hver endring på den ene observabelen, hvis betingelsen for den andre er sann.
Hva jeg prøvde:
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
});
Jeg la merke til at det finnes en Rx.Observable.if, men jeg fikk den ikke til å fungere.
Svar #1
Bruk pausable:
secondState
.pausable(firstState.map(function (s) { return s !== undefined; }))
.subscribe(function (second) {
// only occurs when first is truthy
});
Svar #2
Zip betyr bokstavelig talt så. Det ziper opp ved å ta tilsvarende elementer i to forskjellige sekvenser. Det du prøver å oppnå kan gjøres på mange forskjellige måter.
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);Dette er en av måtene.
