12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { Observable } from '../Observable';
- import { defer } from './defer';
- import { ObservableInput } from '../types';
- /**
- * Checks a boolean at subscription time, and chooses between one of two observable sources
- *
- * `iif` expects a function that returns a boolean (the `condition` function), and two sources,
- * the `trueResult` and the `falseResult`, and returns an Observable.
- *
- * At the moment of subscription, the `condition` function is called. If the result is `true`, the
- * subscription will be to the source passed as the `trueResult`, otherwise, the subscription will be
- * to the source passed as the `falseResult`.
- *
- * If you need to check more than two options to choose between more than one observable, have a look at the {@link defer} creation method.
- *
- * ## Examples
- *
- * Change at runtime which Observable will be subscribed
- *
- * ```ts
- * import { iif, of } from 'rxjs';
- *
- * let subscribeToFirst;
- * const firstOrSecond = iif(
- * () => subscribeToFirst,
- * of('first'),
- * of('second')
- * );
- *
- * subscribeToFirst = true;
- * firstOrSecond.subscribe(value => console.log(value));
- *
- * // Logs:
- * // 'first'
- *
- * subscribeToFirst = false;
- * firstOrSecond.subscribe(value => console.log(value));
- *
- * // Logs:
- * // 'second'
- * ```
- *
- * Control access to an Observable
- *
- * ```ts
- * import { iif, of, EMPTY } from 'rxjs';
- *
- * let accessGranted;
- * const observableIfYouHaveAccess = iif(
- * () => accessGranted,
- * of('It seems you have an access...'),
- * EMPTY
- * );
- *
- * accessGranted = true;
- * observableIfYouHaveAccess.subscribe({
- * next: value => console.log(value),
- * complete: () => console.log('The end')
- * });
- *
- * // Logs:
- * // 'It seems you have an access...'
- * // 'The end'
- *
- * accessGranted = false;
- * observableIfYouHaveAccess.subscribe({
- * next: value => console.log(value),
- * complete: () => console.log('The end')
- * });
- *
- * // Logs:
- * // 'The end'
- * ```
- *
- * @see {@link defer}
- *
- * @param condition Condition which Observable should be chosen.
- * @param trueResult An Observable that will be subscribed if condition is true.
- * @param falseResult An Observable that will be subscribed if condition is false.
- * @return An observable that proxies to `trueResult` or `falseResult`, depending on the result of the `condition` function.
- */
- export function iif<T, F>(condition: () => boolean, trueResult: ObservableInput<T>, falseResult: ObservableInput<F>): Observable<T | F> {
- return defer(() => (condition() ? trueResult : falseResult));
- }
|