internal/operators/exhaustMap.js
/**
 * Projects each source value to an Observable which is merged in the output
 * Observable only if the previous projected Observable has completed.
 *
 * <span class="informal">Maps each value to an Observable, then flattens all of
 * these inner Observables using {@link exhaust}.</span>
 *
 * <img src="./img/exhaustMap.png" width="100%">
 *
 * Returns an Observable that emits items based on applying a function that you
 * supply to each item emitted by the source Observable, where that function
 * returns an (so-called "inner") Observable. When it projects a source value to
 * an Observable, the output Observable begins emitting the items emitted by
 * that projected Observable. However, `exhaustMap` ignores every new projected
 * Observable if the previous projected Observable has not yet completed. Once
 * that one completes, it will accept and flatten the next projected Observable
 * and repeat this process.
 *
 * @example <caption>Run a finite timer for each click, only if there is no currently active timer</caption>
 * var clicks = Rx.Observable.fromEvent(document, 'click');
 * var result = clicks.exhaustMap((ev) => Rx.Observable.interval(1000).take(5));
 * result.subscribe(x => console.log(x));
 *
 * @see {@link concatMap}
 * @see {@link exhaust}
 * @see {@link mergeMap}
 * @see {@link switchMap}
 *
 * @param {function(value: T, ?index: number): ObservableInput} project A function
 * that, when applied to an item emitted by the source Observable, returns an
 * Observable.
 * @return {Observable} An Observable containing projected Observables
 * of each item of the source, ignoring projected Observables that start before
 * their preceding Observable has completed.
 * @method exhaustMap
 * @owner Observable
 */
Projects each source value to an Observable which is merged in the output
Observable only if the previous projected Observable has completed.

Maps each value to an Observable, then flattens all of
these inner Observables using  exhaust.



Returns an Observable that emits items based on applying a function that you
supply to each item emitted by the source Observable, where that function
returns an (so-called "inner") Observable. When it projects a source value to
an Observable, the output Observable begins emitting the items emitted by
that projected Observable. However, `exhaustMap` ignores every new projected
Observable if the previous projected Observable has not yet completed. Once
that one completes, it will accept and flatten the next projected Observable
and repeat this process.





@param {function(value: T, ?index: number): ObservableInput} project A function
that, when applied to an item emitted by the source Observable, returns an
Observable.
@return {Observable} An Observable containing projected Observables
of each item of the source, ignoring projected Observables that start before
their preceding Observable has completed.
@method exhaustMap
@owner Observable
Projects each source value to an Observable which is merged in the output Observable only if the previous projected Observable has completed . Maps each value to an Observable then flattens all of these inner Observables using exhaust . Returns an Observable that emits items based on applying a function that you supply to each item emitted by the source Observable where that function returns an ( so - called " inner " ) Observable . When it projects a source value to an Observable the output Observable begins emitting the items emitted by that projected Observable . However ` exhaustMap ` ignores every new projected Observable if the previous projected Observable has not yet completed . Once that one completes it will accept and flatten the next projected Observable and repeat this process . @param { function ( value : T ?index : number ) : ObservableInput } project A function that when applied to an item emitted by the source Observable returns an Observable . @return { Observable } An Observable containing projected Observables of each item of the source ignoring projected Observables that start before their preceding Observable has completed . @method exhaustMap @owner Observable
function exhaustMap(project) {
    return function (source) {
        return source.lift(new SwitchFirstMapOperator(project));
    };
}
function exhaustMap ( project ) { return function ( source ) { return source . lift ( new SwitchFirstMapOperator ( project ) ) ; } ; }
Projects each source value to an Observable which is merged in the output
 Observable only if the previous projected Observable has completed.
Projects each source value to an Observable which is merged in the output Observable only if the previous projected Observable has completed .