我是RxJS的新手。我知道我可以.filter
和.map
一个观察者来获得我正在寻找的改变。但是,是否有任何方法将两者合并为一个函数?
答案 0 :(得分:25)
是的。
FlatMap。
假设您有一个Observable数字(1,2,3,4,5,...),并且您希望过滤偶数并将它们映射到x * 10.
var tenTimesEvenNumbers = numbers.flatMap(function (x) {
if (x % 2 === 0) {
return Rx.Observable.just(x * 10);
} else {
return Rx.Observable.empty();
}
});
答案 1 :(得分:0)
从 rxjs v6.6.7 开始,解决方案如下:
// Initialise observable with some numbers
const numbers = of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Pipe the observable using mergeMap
const tenTimesEvenNumbers = numbers.pipe(
mergeMap((x: number) => {
// If the number is even, return an observable containing the number multiplied by ten
// Otherwise return an empty observable
return x % 2 === 0 ? of(x * 10) : EMPTY;
})
);
// Subscribe to the observable and print the values
tenTimesEvenNumbers.subscribe((value: number) =>
console.log('Value:', value)
);
上面会打印:
<块引用>Value: 20
Value: 40
Value: 60
Value: 80
Value: 100
这里还有一个有效的 stackblitz。