File size: 1,432 Bytes
bc20498 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
import { ObservableInputTuple, OperatorFunction } from '../types';
import { concat } from './concat';
/**
* Emits all of the values from the source observable, then, once it completes, subscribes
* to each observable source provided, one at a time, emitting all of their values, and not subscribing
* to the next one until it completes.
*
* `concat(a$, b$, c$)` is the same as `a$.pipe(concatWith(b$, c$))`.
*
* ## Example
*
* Listen for one mouse click, then listen for all mouse moves.
*
* ```ts
* import { fromEvent, map, take, concatWith } from 'rxjs';
*
* const clicks$ = fromEvent(document, 'click');
* const moves$ = fromEvent(document, 'mousemove');
*
* clicks$.pipe(
* map(() => 'click'),
* take(1),
* concatWith(
* moves$.pipe(
* map(() => 'move')
* )
* )
* )
* .subscribe(x => console.log(x));
*
* // 'click'
* // 'move'
* // 'move'
* // 'move'
* // ...
* ```
*
* @param otherSources Other observable sources to subscribe to, in sequence, after the original source is complete.
* @return A function that returns an Observable that concatenates
* subscriptions to the source and provided Observables subscribing to the next
* only once the current subscription completes.
*/
export function concatWith<T, A extends readonly unknown[]>(
...otherSources: [...ObservableInputTuple<A>]
): OperatorFunction<T, T | A[number]> {
return concat(...otherSources);
}
|