组合减少和与对象
问题描述:
RxJS版本扫描:5.5.2组合减少和与对象
我有一个数组const v = [1, 2, 3];
我希望能够创建此数组中的主体和行为像一个可观察到它消耗1,2,3的值。之后,我想要像一个主题。
这是我遇到麻烦的地方。我需要在每个主题中附加时间上,则初始值v = [1, 2, 3]
使用reduce
另一个值使用scan
下面是代码:
const v = [1, 2, 3];
const sub = new Subject<number>();
const observable = sub.pipe(
startWith(0),
concatMap(x => from(v)),
scan((a, b) => { // or reduce
return a + b;
}, 0),
);
observable.subscribe(x => console.log(x));
如果我使用scan
这儿,这是印在控制台
1
3
6
我想要打印的只是最后一个值6
。只有在主题完成后才能替代scan
和reduce
(这样我以后不能再发送任何值)。
然后每当主题发送一个值sub.next(4);
来打印10
等等。
答
您可以使用skipWhile()
跳过从scan
前N排放量,你不想要的:
import { Subject } from "rxjs/Subject";
import { from } from "rxjs/observable/from";
import { of } from "rxjs/observable/of";
import { merge, concatMap, scan, skipWhile, tap } from "rxjs/operators";
const v = [1, 2, 3];
let skipFirst;
const sub = new Subject<number>();
const observable = of(v).pipe(
tap(arr => skipFirst = arr.length),
concatMap(arr => from(arr)),
merge(sub),
scan((a, b) => { // or reduce
return a + b;
}, 0),
skipWhile(() => --skipFirst > 0),
);
observable.subscribe(x => console.log(x));
sub.next(5);
此打印:
6
11