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