/** prettier */ | |
import { Observable } from '../Observable'; | |
import { concat } from '../observable/concat'; | |
import { of } from '../observable/of'; | |
import { MonoTypeOperatorFunction, SchedulerLike, OperatorFunction, ValueFromArray } from '../types'; | |
/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `concatAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */ | |
export function endWith<T>(scheduler: SchedulerLike): MonoTypeOperatorFunction<T>; | |
/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `concatAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */ | |
export function endWith<T, A extends unknown[] = T[]>( | |
...valuesAndScheduler: [...A, SchedulerLike] | |
): OperatorFunction<T, T | ValueFromArray<A>>; | |
export function endWith<T, A extends unknown[] = T[]>(...values: A): OperatorFunction<T, T | ValueFromArray<A>>; | |
/** | |
* Returns an observable that will emit all values from the source, then synchronously emit | |
* the provided value(s) immediately after the source completes. | |
* | |
* NOTE: Passing a last argument of a Scheduler is _deprecated_, and may result in incorrect | |
* types in TypeScript. | |
* | |
* This is useful for knowing when an observable ends. Particularly when paired with an | |
* operator like {@link takeUntil} | |
* | |
*  | |
* | |
* ## Example | |
* | |
* Emit values to know when an interval starts and stops. The interval will | |
* stop when a user clicks anywhere on the document. | |
* | |
* ```ts | |
* import { interval, map, fromEvent, startWith, takeUntil, endWith } from 'rxjs'; | |
* | |
* const ticker$ = interval(5000).pipe( | |
* map(() => 'tick') | |
* ); | |
* | |
* const documentClicks$ = fromEvent(document, 'click'); | |
* | |
* ticker$.pipe( | |
* startWith('interval started'), | |
* takeUntil(documentClicks$), | |
* endWith('interval ended by click') | |
* ) | |
* .subscribe(x => console.log(x)); | |
* | |
* // Result (assuming a user clicks after 15 seconds) | |
* // 'interval started' | |
* // 'tick' | |
* // 'tick' | |
* // 'tick' | |
* // 'interval ended by click' | |
* ``` | |
* | |
* @see {@link startWith} | |
* @see {@link concat} | |
* @see {@link takeUntil} | |
* | |
* @param values Items you want the modified Observable to emit last. | |
* @return A function that returns an Observable that emits all values from the | |
* source, then synchronously emits the provided value(s) immediately after the | |
* source completes. | |
*/ | |
export function endWith<T>(...values: Array<T | SchedulerLike>): MonoTypeOperatorFunction<T> { | |
return (source: Observable<T>) => concat(source, of(...values)) as Observable<T>; | |
} | |