Rxjs - Operators - SwitchMap

如果switch不够用,就看看这个switchMap吧

Signature

export declare function switchMap<T, I, R>(
project: (value: T, index: number) => ObservableInput<I>,
resultSelector?: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): Observable<R>;

简单用法

var clicks = Rx.Observable.fromEvent(document, 'click');
var result = clicks.switchMap((ev) => Rx.Observable.interval(1000));
result.subscribe(x => console.log(x));

请和switch对比,他直接融合的map操作

复杂参数

而且可以更具体

  • resultSelector

    • outerValue click流的元素
    • innerValue interval流的数据
    • outerIndex click流的index
    • innerIndex interval流的数据
  • project

    • value click流的数据
    • index click流的index
var clicks = Rx.Observable.fromEvent(document, 'click');
var result = clicks.switchMap((value, index) => {
// console.log("value", value, "index", index);
return Rx.Observable.range(1,9);
},(outerV,innerV,outerI,innerI)=>{
// console.log("outerV",outerV,"innerV",innerV,"outerI",outerI,"innerI",innerI)
return [outerV,innerV];
});
result.subscribe(x => console.log(x));

注意看resultSelector的返回值 最后会被包在Observable里,所以要返回真正的value而不是像project一样返回一个流