Rxjs - Operators - CombineAll

Signature

export declare function combineAll<R>(project?: (...values: Array<any>) => R): Observable<R>;

Example

var clicks = Rx.Observable.fromEvent(document, 'click');
var higherOrder = clicks.map(ev => {
return a = Rx.Observable.interval(2000).take(3);
}
).take(4);

var result = higherOrder.combineAll((x, y, z, l) => {
console.log("1:", x, "2:", y, "3:", z, "4:", l)
return x + y + z + l
});
result.subscribe(x => console.log(x));

如果没有project,他会把内部的多个子流执行 combineLatest 结果输出

场景 –重点是高阶的那个控制流

首先和combineLatest对比:
这个operator 多了一个限制,就是需要一个高阶Observable Complete 的时候才去执行
内部子流的combineLatest

这个例子的输出

1: 0 2: 0 3: 0 4: 0
0
1: 1 2: 0 3: 0 4: 0
1
1: 1 2: 1 3: 0 4: 0
2
1: 1 2: 1 3: 1 4: 0
3
1: 1 2: 1 3: 1 4: 1
4
1: 2 2: 1 3: 1 4: 1
5
1: 2 2: 2 3: 1 4: 1
6
1: 2 2: 2 3: 2 4: 1
7
1: 2 2: 2 3: 2 4: 2
8

思考

如果子流像这个例子一样都是异步流,那就会形成 时间旅行的感觉
个人认为: 绝佳debug场景恢复