@reactivex/ix-esnext-esm
Version:
The Interactive Extensions for JavaScript
44 lines (42 loc) • 1.24 kB
JavaScript
import { AsyncIterableX } from '../asynciterablex';
import { returnAsyncIterator } from '../../util/returniterator';
export class CatchWithAsyncIterable extends AsyncIterableX {
constructor(source, handler) {
super();
this._source = source;
this._handler = handler;
}
async *[Symbol.asyncIterator]() {
let err;
let hasError = false;
const it = this._source[Symbol.asyncIterator]();
while (1) {
let c = {};
try {
c = await it.next();
if (c.done) {
await returnAsyncIterator(it);
break;
}
}
catch (e) {
err = await this._handler(e);
hasError = true;
await returnAsyncIterator(it);
break;
}
yield c.value;
}
if (hasError) {
for await (const item of err) {
yield item;
}
}
}
}
export function catchError(handler) {
return function catchWithOperatorFunction(source) {
return new CatchWithAsyncIterable(source, handler);
};
}
//# sourceMappingURL=catcherror.mjs.map