source: trip-planner-front/node_modules/rxjs/src/internal/observable/range.ts

Last change on this file was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 2.3 KB
Line 
1import { SchedulerAction, SchedulerLike } from '../types';
2import { Observable } from '../Observable';
3
4/**
5 * Creates an Observable that emits a sequence of numbers within a specified
6 * range.
7 *
8 * <span class="informal">Emits a sequence of numbers in a range.</span>
9 *
10 * ![](range.png)
11 *
12 * `range` operator emits a range of sequential integers, in order, where you
13 * select the `start` of the range and its `length`. By default, uses no
14 * {@link SchedulerLike} and just delivers the notifications synchronously, but may use
15 * an optional {@link SchedulerLike} to regulate those deliveries.
16 *
17 * ## Example
18 * Emits the numbers 1 to 10</caption>
19 * ```ts
20 * import { range } from 'rxjs';
21 *
22 * const numbers = range(1, 10);
23 * numbers.subscribe(x => console.log(x));
24 * ```
25 * @see {@link timer}
26 * @see {@link index/interval}
27 *
28 * @param {number} [start=0] The value of the first integer in the sequence.
29 * @param {number} count The number of sequential integers to generate.
30 * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} to use for scheduling
31 * the emissions of the notifications.
32 * @return {Observable} An Observable of numbers that emits a finite range of
33 * sequential integers.
34 * @static true
35 * @name range
36 * @owner Observable
37 */
38export function range(start: number = 0,
39 count?: number,
40 scheduler?: SchedulerLike): Observable<number> {
41 return new Observable<number>(subscriber => {
42 if (count === undefined) {
43 count = start;
44 start = 0;
45 }
46
47 let index = 0;
48 let current = start;
49
50 if (scheduler) {
51 return scheduler.schedule(dispatch, 0, {
52 index, count, start, subscriber
53 });
54 } else {
55 do {
56 if (index++ >= count) {
57 subscriber.complete();
58 break;
59 }
60 subscriber.next(current++);
61 if (subscriber.closed) {
62 break;
63 }
64 } while (true);
65 }
66
67 return undefined;
68 });
69}
70
71/** @internal */
72export function dispatch(this: SchedulerAction<any>, state: any) {
73 const { start, index, count, subscriber } = state;
74
75 if (index >= count) {
76 subscriber.complete();
77 return;
78 }
79
80 subscriber.next(start);
81
82 if (subscriber.closed) {
83 return;
84 }
85
86 state.index = index + 1;
87 state.start = start + 1;
88
89 this.schedule(state);
90}
Note: See TracBrowser for help on using the repository browser.