UNPKG

1.15 kBJavaScriptView Raw
1import { AsyncIterableX } from './asynciterablex';
2import { returnAsyncIterator } from '../internal/returniterator';
3export class CatchWithAsyncIterable extends AsyncIterableX {
4 constructor(source, handler) {
5 super();
6 this._source = source;
7 this._handler = handler;
8 }
9 async *[Symbol.asyncIterator]() {
10 let err, hasError = false, it = this._source[Symbol.asyncIterator]();
11 while (1) {
12 let c = {};
13 try {
14 c = await it.next();
15 if (c.done) {
16 await returnAsyncIterator(it);
17 break;
18 }
19 }
20 catch (e) {
21 err = await this._handler(e);
22 hasError = true;
23 await returnAsyncIterator(it);
24 break;
25 }
26 yield c.value;
27 }
28 if (hasError) {
29 for await (let item of err) {
30 yield item;
31 }
32 }
33 }
34}
35export function catchWith(source, handler) {
36 return new CatchWithAsyncIterable(source, handler);
37}
38
39//# sourceMappingURL=catchwith.mjs.map