| import {OperatorFunction, ObservableInput} from '../types'; |
| import { switchMap } from './switchMap'; |
| import { identity } from '../util/identity'; |
| |
| export function switchAll<T>(): OperatorFunction<ObservableInput<T>, T>; |
| export function switchAll<R>(): OperatorFunction<any, R>; |
| |
| /** |
| * 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.png) |
| * |
| * `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, interval } from 'rxjs'; |
| * import { switchAll, map, tap } from 'rxjs/operators'; |
| * |
| * const clicks = fromEvent(document, 'click').pipe(tap(() => console.log('click'))); |
| * const source = clicks.pipe(map((ev) => interval(1000))); |
| * |
| * source.pipe( |
| * switchAll() |
| * ).subscribe(x => console.log(x)); |
| * |
| /* Output |
| * click |
| * 1 |
| * 2 |
| * 3 |
| * 4 |
| * ... |
| * click |
| * 1 |
| * 2 |
| * 3 |
| * ... |
| * click |
| * ... |
| * ``` |
| * |
| * @see {@link combineAll} |
| * @see {@link concatAll} |
| * @see {@link exhaust} |
| * @see {@link switchMap} |
| * @see {@link switchMapTo} |
| * @see {@link mergeAll} |
| */ |
| |
| export function switchAll<T>(): OperatorFunction<ObservableInput<T>, T> { |
| return switchMap(identity); |
| } |