1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';
- import { switchMap } from './switchMap';
- import { identity } from '../util/identity';
- /**
- * Converts a higher-order Observable into a first-order Observable
- * producing values only from the most recent observable sequence
- *
- * <span class="informal">Flattens an Observable-of-Observables.</span>
- *
- * 
- *
- * `switchAll` subscribes to a source that is an observable of observables, also known as a
- * "higher-order observable" (or `Observable<Observable<T>>`). It subscribes to the most recently
- * provided "inner observable" emitted by the source, unsubscribing from any previously subscribed
- * to inner observable, such that only the most recent inner observable may be subscribed to at
- * any point in time. The resulting observable returned by `switchAll` will only complete if the
- * source observable completes, *and* any currently subscribed to inner observable also has completed,
- * if there are any.
- *
- * ## Examples
- *
- * Spawn a new interval observable for each click event, but for every new
- * click, cancel the previous interval and subscribe to the new one
- *
- * ```ts
- * import { fromEvent, tap, map, interval, switchAll } from 'rxjs';
- *
- * const clicks = fromEvent(document, 'click').pipe(tap(() => console.log('click')));
- * const source = clicks.pipe(map(() => interval(1000)));
- *
- * source
- * .pipe(switchAll())
- * .subscribe(x => console.log(x));
- *
- * // Output
- * // click
- * // 0
- * // 1
- * // 2
- * // 3
- * // ...
- * // click
- * // 0
- * // 1
- * // 2
- * // ...
- * // click
- * // ...
- * ```
- *
- * @see {@link combineLatestAll}
- * @see {@link concatAll}
- * @see {@link exhaustAll}
- * @see {@link switchMap}
- * @see {@link switchMapTo}
- * @see {@link mergeAll}
- *
- * @return A function that returns an Observable that converts a higher-order
- * Observable into a first-order Observable producing values only from the most
- * recent Observable sequence.
- */
- export function switchAll<O extends ObservableInput<any>>(): OperatorFunction<O, ObservedValueOf<O>> {
- return switchMap(identity);
- }
|