123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import { ObservableInputTuple, OperatorFunction, Cons } from '../types';
- import { combineLatest } from './combineLatest';
- /**
- * Create an observable that combines the latest values from all passed observables and the source
- * into arrays and emits them.
- *
- * Returns an observable, that when subscribed to, will subscribe to the source observable and all
- * sources provided as arguments. Once all sources emit at least one value, all of the latest values
- * will be emitted as an array. After that, every time any source emits a value, all of the latest values
- * will be emitted as an array.
- *
- * This is a useful operator for eagerly calculating values based off of changed inputs.
- *
- * ## Example
- *
- * Simple concatenation of values from two inputs
- *
- * ```ts
- * import { fromEvent, combineLatestWith, map } from 'rxjs';
- *
- * // Setup: Add two inputs to the page
- * const input1 = document.createElement('input');
- * document.body.appendChild(input1);
- * const input2 = document.createElement('input');
- * document.body.appendChild(input2);
- *
- * // Get streams of changes
- * const input1Changes$ = fromEvent(input1, 'change');
- * const input2Changes$ = fromEvent(input2, 'change');
- *
- * // Combine the changes by adding them together
- * input1Changes$.pipe(
- * combineLatestWith(input2Changes$),
- * map(([e1, e2]) => (<HTMLInputElement>e1.target).value + ' - ' + (<HTMLInputElement>e2.target).value)
- * )
- * .subscribe(x => console.log(x));
- * ```
- *
- * @param otherSources the other sources to subscribe to.
- * @return A function that returns an Observable that emits the latest
- * emissions from both source and provided Observables.
- */
- export function combineLatestWith<T, A extends readonly unknown[]>(
- ...otherSources: [...ObservableInputTuple<A>]
- ): OperatorFunction<T, Cons<T, A>> {
- return combineLatest(...otherSources);
- }
|