Skip to content

Commit 009b28d

Browse files
authored
Merge branch 'master' into je-yield
2 parents ff2f947 + 9d45d5b commit 009b28d

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

src/asynciterable/_sleep.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { AbortError } from '../aborterror.js';
22

3-
export function sleep(dueTime: number, signal?: AbortSignal) {
4-
return new Promise<void>((resolve, reject) => {
3+
export function sleep(dueTime: number, signal?: AbortSignal, unref = false): Promise<void> {
4+
return new Promise((resolve, reject) => {
55
if (signal && signal.aborted) {
66
reject(new AbortError());
77
}
@@ -18,6 +18,10 @@ export function sleep(dueTime: number, signal?: AbortSignal) {
1818
resolve();
1919
}, dueTime);
2020

21+
if (unref && typeof id['unref'] === 'function') {
22+
id['unref']();
23+
}
24+
2125
if (signal) {
2226
signal.addEventListener('abort', onAbort, { once: true });
2327
}

src/asynciterable/interval.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@ import { throwIfAborted } from '../aborterror.js';
44

55
class IntervalAsyncIterable extends AsyncIterableX<number> {
66
private _dueTime: number;
7+
private _unref: boolean;
78

8-
constructor(dueTime: number) {
9+
constructor(dueTime: number, unref: boolean) {
910
super();
1011
this._dueTime = dueTime;
12+
this._unref = unref;
1113
}
1214

1315
async *[Symbol.asyncIterator](signal?: AbortSignal) {
1416
throwIfAborted(signal);
1517

1618
let i = 0;
1719
while (1) {
18-
await sleep(this._dueTime, signal);
20+
await sleep(this._dueTime, signal, this._unref);
1921
yield i++;
2022
}
2123
}
@@ -25,8 +27,9 @@ class IntervalAsyncIterable extends AsyncIterableX<number> {
2527
* Produces a new item in an async-iterable at the given interval cycle time.
2628
*
2729
* @param {number} dueTime The due time in milliseconds to spawn a new item.
30+
* @param {boolean} [unref=false] Whether to unref the interval timer.
2831
* @returns {AsyncIterableX<number>} An async-iterable producing values at the specified interval.
2932
*/
30-
export function interval(dueTime: number): AsyncIterableX<number> {
31-
return new IntervalAsyncIterable(dueTime);
33+
export function interval(dueTime: number, unref = false): AsyncIterableX<number> {
34+
return new IntervalAsyncIterable(dueTime, unref);
3235
}

src/asynciterable/operators/buffercountortime.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ class BufferCountOrTime<TSource> extends AsyncIterableX<TSource[]> {
1818

1919
async *[Symbol.asyncIterator](signal?: AbortSignal) {
2020
const buffer: TSource[] = [];
21-
22-
const timer = interval(this.maxWaitTime).pipe(map(() => timerEvent));
21+
const timer = interval(this.maxWaitTime, true).pipe(map(() => timerEvent));
2322
const source = concat(this.source, of(ended));
2423
const merged = merge(source, timer);
2524

src/asynciterable/operators/timeout.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export class TimeoutAsyncIterable<TSource> extends AsyncIterableX<TSource> {
6262
it.next().then((val) => {
6363
return { type: VALUE_TYPE, value: val };
6464
}),
65-
sleep(this._dueTime, signal).then(() => {
65+
sleep(this._dueTime, signal, true).then(() => {
6666
return { type: ERROR_TYPE };
6767
}),
6868
]);

0 commit comments

Comments
 (0)