2378
2379
export function cancellableIterable<T>(iterableOrIterator: AsyncIterator<T> | AsyncIterable<T>, token: CancellationToken): AsyncIterableIterator<T> {
2380
>
const iterator = Symbol.asyncIterator in iterableOrIterator ? iterableOrIterator[Symbol.asyncIterator]() : iterableOrIterator;
async.ts
2381
>
2382
>
return {
2383
>
async next(): Promise<IteratorResult<T>> {
2384
>
if (token.isCancellationRequested) {
2385
return { done: true, value: undefined };
2386
}
2387
const result = await raceCancellation(iterator.next(), token);
2388
return result || { done: true, value: undefined };
2390
>
throw: iterator.throw?.bind(iterator),
2391
>
return: iterator.return?.bind(iterator),
2392
>
[Symbol.asyncIterator]() {
2393
>
return this;
2394
>
}
2395
>
};
2396
>
}
2397
2398
type ProducerConsumerValue<T> = {