UNPKG

1.94 kBJavaScriptView Raw
1import { IterableX } from './iterablex';
2import { returnIterator } from '../util/returniterator';
3export class CatchIterable extends IterableX {
4 constructor(source) {
5 super();
6 this._source = source;
7 }
8 *[Symbol.iterator]() {
9 let error = null;
10 let hasError = false;
11 for (const source of this._source) {
12 const it = source[Symbol.iterator]();
13 error = null;
14 hasError = false;
15 while (1) {
16 let c = {};
17 try {
18 const { done, value } = it.next();
19 if (done) {
20 returnIterator(it);
21 break;
22 }
23 c = value;
24 }
25 catch (e) {
26 error = e;
27 hasError = true;
28 returnIterator(it);
29 break;
30 }
31 yield c;
32 }
33 if (!hasError) {
34 break;
35 }
36 }
37 if (hasError) {
38 throw error;
39 }
40 }
41}
42/**
43 * Creates a sequence by concatenating source sequences until a source sequence completes successfully.
44 * @param {Iterable<Iterable<TSource>>} source Source sequences.
45 * @return {Iterable<TSource>} Sequence that continues to concatenate source sequences while errors occur.
46 */
47export function catchAll(source) {
48 return new CatchIterable(source);
49}
50/**
51 * Creates a sequence by concatenating source sequences until a source sequence completes successfully.
52 * @param {...Iterable<TSource>} source Sequence that continues to concatenate source sequences while errors occur.
53 * @return {Iterable<TSource>} Sequence that continues to concatenate source sequences while errors occur.
54 */
55export function catchError(...source) {
56 return new CatchIterable(source);
57}
58
59//# sourceMappingURL=catcherror.mjs.map