ix
Version:
The Interactive Extensions for JavaScript
28 lines (24 loc) • 742 B
text/typescript
import { AsyncIterableX } from './asynciterablex.js';
import { throwIfAborted, AbortError } from '../aborterror.js';
/** @ignore */
export class NeverAsyncIterable extends AsyncIterableX<never> {
constructor() {
super();
}
async *[Symbol.asyncIterator](signal?: AbortSignal) {
throwIfAborted(signal);
await new Promise<never>((_, reject) => {
if (signal) {
signal.addEventListener('abort', () => reject(new AbortError()), { once: true });
}
});
}
}
/**
* An async-iterable sequence that never returns a value.
*
* @returns {AsyncIterableX<never>} An async-iterable sequence that never returns a value.
*/
export function never(): AsyncIterableX<never> {
return new NeverAsyncIterable();
}