123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- 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 start The value of the first integer in the sequence.
- * @param count The number of sequential integers to generate.
- * @param scheduler A {@link SchedulerLike} to use for scheduling the emissions
- * of the notifications.
- * @return 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();
- }
- );
- }
|