494f726cab19a5a6e07c706858aa570946f72cca1633d9ad1aefbf2a8a08d8b1fd33d7cb195ed0e61037155620da666cd87a5f7a46ec3aae49813ce55fe8a9 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { OperatorFunction, ObservedValueOf, ObservableInput } from '../types';
  2. import { mergeMap } from './mergeMap';
  3. import { isFunction } from '../util/isFunction';
  4. /** @deprecated Will be removed in v9. Use {@link mergeMap} instead: `mergeMap(() => result)` */
  5. export function mergeMapTo<O extends ObservableInput<unknown>>(
  6. innerObservable: O,
  7. concurrent?: number
  8. ): OperatorFunction<unknown, ObservedValueOf<O>>;
  9. /**
  10. * @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead.
  11. * Details: https://rxjs.dev/deprecations/resultSelector
  12. */
  13. export function mergeMapTo<T, R, O extends ObservableInput<unknown>>(
  14. innerObservable: O,
  15. resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R,
  16. concurrent?: number
  17. ): OperatorFunction<T, R>;
  18. /* tslint:enable:max-line-length */
  19. /**
  20. * Projects each source value to the same Observable which is merged multiple
  21. * times in the output Observable.
  22. *
  23. * <span class="informal">It's like {@link mergeMap}, but maps each value always
  24. * to the same inner Observable.</span>
  25. *
  26. * ![](mergeMapTo.png)
  27. *
  28. * Maps each source value to the given Observable `innerObservable` regardless
  29. * of the source value, and then merges those resulting Observables into one
  30. * single Observable, which is the output Observable.
  31. *
  32. * ## Example
  33. *
  34. * For each click event, start an interval Observable ticking every 1 second
  35. *
  36. * ```ts
  37. * import { fromEvent, mergeMapTo, interval } from 'rxjs';
  38. *
  39. * const clicks = fromEvent(document, 'click');
  40. * const result = clicks.pipe(mergeMapTo(interval(1000)));
  41. *
  42. * result.subscribe(x => console.log(x));
  43. * ```
  44. *
  45. * @see {@link concatMapTo}
  46. * @see {@link merge}
  47. * @see {@link mergeAll}
  48. * @see {@link mergeMap}
  49. * @see {@link mergeScan}
  50. * @see {@link switchMapTo}
  51. *
  52. * @param innerObservable An `ObservableInput` to replace each value from the
  53. * source Observable.
  54. * @param concurrent Maximum number of input Observables being subscribed to
  55. * concurrently.
  56. * @return A function that returns an Observable that emits items from the
  57. * given `innerObservable`.
  58. * @deprecated Will be removed in v9. Use {@link mergeMap} instead: `mergeMap(() => result)`
  59. */
  60. export function mergeMapTo<T, R, O extends ObservableInput<unknown>>(
  61. innerObservable: O,
  62. resultSelector?: ((outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R) | number,
  63. concurrent: number = Infinity
  64. ): OperatorFunction<T, ObservedValueOf<O> | R> {
  65. if (isFunction(resultSelector)) {
  66. return mergeMap(() => innerObservable, resultSelector, concurrent);
  67. }
  68. if (typeof resultSelector === 'number') {
  69. concurrent = resultSelector;
  70. }
  71. return mergeMap(() => innerObservable, concurrent);
  72. }