组合减少和与对象

组合减少和与对象

问题描述:

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。只有在主题完成后才能替代scanreduce(这样我以后不能再发送任何值)。

然后每当主题发送一个值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