javascript - RxJS: Bagaimana saya boleh membuat 'if' dengan Observables?
Katakan saya mempunyai dua observable dan saya ingin mendengar perubahan pada satu observable, jika observable yang lain memenuhi keadaan tertentu. Saya mencubanya dengan zip tetapi nampaknya saya hanya akan diberitahu, jika kedua-dua observable berubah, tetapi saya ingin diberitahu untuk setiap perubahan pada satu observable itu, jika keadaan pada yang lain adalah benar.
Apa yang saya cuba:
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
});
Saya perasan ada Rx.Observable.if, tetapi saya tidak dapat menjadikannya berfungsi.
Jawapan #1
Gunakan boleh dijeda:
secondState
.pausable(firstState.map(function (s) { return s !== undefined; }))
.subscribe(function (second) {
// only occurs when first is truthy
});
Jawapan #2
Zip secara harfiah bermaksud begitu. Ia zip naik dengan mengambil elemen yang sepadan dalam dua urutan yang berbeza. Apa yang anda cuba capai boleh dilakukan dengan banyak cara yang berbeza.
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);Ini adalah salah satu cara.
