range.ts
2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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();
}
);
}