bd505d8f373dc74031d0d9b449c65f8a6a231e0e23b5e9cfd4aea01a4f6055d079a638d38c44207a3a31647606f291559652b912ee03101c5d77a54f8395b6 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { SchedulerLike } from '../types';
  2. import { Observable } from '../Observable';
  3. import { EMPTY } from './empty';
  4. export function range(start: number, count?: number): Observable<number>;
  5. /**
  6. * @deprecated The `scheduler` parameter will be removed in v8. Use `range(start, count).pipe(observeOn(scheduler))` instead. Details: Details: https://rxjs.dev/deprecations/scheduler-argument
  7. */
  8. export function range(start: number, count: number | undefined, scheduler: SchedulerLike): Observable<number>;
  9. /**
  10. * Creates an Observable that emits a sequence of numbers within a specified
  11. * range.
  12. *
  13. * <span class="informal">Emits a sequence of numbers in a range.</span>
  14. *
  15. * ![](range.png)
  16. *
  17. * `range` operator emits a range of sequential integers, in order, where you
  18. * select the `start` of the range and its `length`. By default, uses no
  19. * {@link SchedulerLike} and just delivers the notifications synchronously, but may use
  20. * an optional {@link SchedulerLike} to regulate those deliveries.
  21. *
  22. * ## Example
  23. *
  24. * Produce a range of numbers
  25. *
  26. * ```ts
  27. * import { range } from 'rxjs';
  28. *
  29. * const numbers = range(1, 3);
  30. *
  31. * numbers.subscribe({
  32. * next: value => console.log(value),
  33. * complete: () => console.log('Complete!')
  34. * });
  35. *
  36. * // Logs:
  37. * // 1
  38. * // 2
  39. * // 3
  40. * // 'Complete!'
  41. * ```
  42. *
  43. * @see {@link timer}
  44. * @see {@link interval}
  45. *
  46. * @param start The value of the first integer in the sequence.
  47. * @param count The number of sequential integers to generate.
  48. * @param scheduler A {@link SchedulerLike} to use for scheduling the emissions
  49. * of the notifications.
  50. * @return An Observable of numbers that emits a finite range of sequential integers.
  51. */
  52. export function range(start: number, count?: number, scheduler?: SchedulerLike): Observable<number> {
  53. if (count == null) {
  54. // If one argument was passed, it's the count, not the start.
  55. count = start;
  56. start = 0;
  57. }
  58. if (count <= 0) {
  59. // No count? We're going nowhere. Return EMPTY.
  60. return EMPTY;
  61. }
  62. // Where the range should stop.
  63. const end = count + start;
  64. return new Observable(
  65. scheduler
  66. ? // The deprecated scheduled path.
  67. (subscriber) => {
  68. let n = start;
  69. return scheduler.schedule(function () {
  70. if (n < end) {
  71. subscriber.next(n++);
  72. this.schedule();
  73. } else {
  74. subscriber.complete();
  75. }
  76. });
  77. }
  78. : // Standard synchronous range.
  79. (subscriber) => {
  80. let n = start;
  81. while (n < end && !subscriber.closed) {
  82. subscriber.next(n++);
  83. }
  84. subscriber.complete();
  85. }
  86. );
  87. }