Search code examples
javascriptrxjsobservable

How to use map operator as mergeMap?


Now that mergeMap is deprecated, and the source has this comment in it:

/* @deprecated resultSelector no longer supported, use inner map instead */

How do I use an "inner map" instead? I guess that means using the map operator function inside of .pipe, but the observable is not flattened, as it is with mergeMap.

obs1$.pipe(map(() => obs2$)).subscribe(r => console.log(r === obs2$))
// > true

So, how do the equivalent of mergeMap without it?


Solution

  • You still use mergeMap, it's just the resultSelector function that deprecates.

    This one is not deprecated:

    export function mergeMap<T, R>(project: (value: T, index: number) => ObservableInput<R>, concurrent?: number): OperatorFunction<T, R>;
    

    However, these are:

    /** @deprecated resultSelector no longer supported, use inner map instead */
    export function mergeMap<T, R>(project: (value: T, index: number) => ObservableInput<R>, resultSelector: undefined, concurrent?: number): OperatorFunction<T, R>;
    /** @deprecated resultSelector no longer supported, use inner map instead */
    export function mergeMap<T, I, R>(project: (value: T, index: number) => ObservableInput<I>, resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R, concurrent?: number): OperatorFunction<T, R>;