UNPKG

rxjs

Version:

Reactive Extensions for modern JavaScript

65 lines (62 loc) 3.02 kB
import { switchMap } from './switchMap'; import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types'; import { isFunction } from '../util/isFunction'; /** @deprecated Will be removed in v9. Use {@link switchMap} instead: `switchMap(() => result)` */ export function switchMapTo<O extends ObservableInput<unknown>>(observable: O): OperatorFunction<unknown, ObservedValueOf<O>>; /** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */ export function switchMapTo<O extends ObservableInput<unknown>>( observable: O, resultSelector: undefined ): OperatorFunction<unknown, ObservedValueOf<O>>; /** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */ export function switchMapTo<T, R, O extends ObservableInput<unknown>>( observable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R ): OperatorFunction<T, R>; /** * Projects each source value to the same Observable which is flattened multiple * times with {@link switchMap} in the output Observable. * * <span class="informal">It's like {@link switchMap}, but maps each value * always to the same inner Observable.</span> * * ![](switchMapTo.png) * * Maps each source value to the given Observable `innerObservable` regardless * of the source value, and then flattens those resulting Observables into one * single Observable, which is the output Observable. The output Observables * emits values only from the most recently emitted instance of * `innerObservable`. * * ## Example * * Restart an interval Observable on every click event * * ```ts * import { fromEvent, switchMapTo, interval } from 'rxjs'; * * const clicks = fromEvent(document, 'click'); * const result = clicks.pipe(switchMapTo(interval(1000))); * result.subscribe(x => console.log(x)); * ``` * * @see {@link concatMapTo} * @see {@link switchAll} * @see {@link switchMap} * @see {@link mergeMapTo} * * @param innerObservable An `ObservableInput` to replace each value from the * source Observable. * @return A function that returns an Observable that emits items from the * given `innerObservable` (and optionally transformed through the deprecated * `resultSelector`) every time a value is emitted on the source Observable, * and taking only the values from the most recently projected inner * Observable. * @deprecated Will be removed in v9. Use {@link switchMap} instead: `switchMap(() => result)` */ export function switchMapTo<T, R, O extends ObservableInput<unknown>>( innerObservable: O, resultSelector?: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R ): OperatorFunction<T, ObservedValueOf<O> | R> { return isFunction(resultSelector) ? switchMap(() => innerObservable, resultSelector) : switchMap(() => innerObservable); }