| import { SchedulerLike } from '../types'; |
| import { Observable } from '../Observable'; |
| import { EMPTY } from './empty'; |
| |
| export function range(start: number, count?: number): Observable<number>; |
| |
| /** |
| * @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 |
| */ |
| export function range(start: number, count: number | undefined, scheduler: SchedulerLike): Observable<number>; |
| |
| /** |
| * Creates an Observable that emits a sequence of numbers within a specified |
| * range. |
| * |
| * <span class="informal">Emits a sequence of numbers in a range.</span> |
| * |
| *  |
| * |
| * `range` operator emits a range of sequential integers, in order, where you |
| * select the `start` of the range and its `length`. By default, uses no |
| * {@link SchedulerLike} and just delivers the notifications synchronously, but may use |
| * an optional {@link SchedulerLike} to regulate those deliveries. |
| * |
| * ## Example |
| * |
| * Produce a range of numbers |
| * |
| * ```ts |
| * import { range } from 'rxjs'; |
| * |
| * const numbers = range(1, 3); |
| * |
| * numbers.subscribe({ |
| * next: value => console.log(value), |
| * complete: () => console.log('Complete!') |
| * }); |
| * |
| * // Logs: |
| * // 1 |
| * // 2 |
| * // 3 |
| * // 'Complete!' |
| * ``` |
| * |
| * @see {@link timer} |
| * @see {@link interval} |
| * |
| * @param {number} [start=0] The value of the first integer in the sequence. |
| * @param {number} count The number of sequential integers to generate. |
| * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} to use for scheduling |
| * the emissions of the notifications. |
| * @return {Observable} An Observable of numbers that emits a finite range of |
| * sequential integers. |
| */ |
| export function range(start: number, count?: number, scheduler?: SchedulerLike): Observable<number> { |
| if (count == null) { |
| // If one argument was passed, it's the count, not the start. |
| count = start; |
| start = 0; |
| } |
| |
| if (count <= 0) { |
| // No count? We're going nowhere. Return EMPTY. |
| return EMPTY; |
| } |
| |
| // Where the range should stop. |
| const end = count + start; |
| |
| return new Observable( |
| scheduler |
| ? // The deprecated scheduled path. |
| (subscriber) => { |
| let n = start; |
| return scheduler.schedule(function () { |
| if (n < end) { |
| subscriber.next(n++); |
| this.schedule(); |
| } else { |
| subscriber.complete(); |
| } |
| }); |
| } |
| : // Standard synchronous range. |
| (subscriber) => { |
| let n = start; |
| while (n < end && !subscriber.closed) { |
| subscriber.next(n++); |
| } |
| subscriber.complete(); |
| } |
| ); |
| } |