From 428ebea9f8a98d36285f6bf00b1310751867073c Mon Sep 17 00:00:00 2001 From: Shota Nozaki Date: Thu, 24 Nov 2016 21:19:31 +0900 Subject: [PATCH] Add static onErrorResumeNext() --- src/Enumerable.ts | 1 - src/extensions/static/onErrorResumeNext.ts | 14 +++++++++++++ src/index.ts | 1 + src/onErrorResumeNext.ts | 5 ++++- src/static/onErrorResumeNext.ts | 8 ++++++++ test/onErrorResumeNextTest.ts | 8 +++++++- test/static/onErrorResumeNext.ts | 23 ++++++++++++++++++++++ 7 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/extensions/static/onErrorResumeNext.ts create mode 100644 src/static/onErrorResumeNext.ts create mode 100644 test/static/onErrorResumeNext.ts diff --git a/src/Enumerable.ts b/src/Enumerable.ts index fce5a92..f258da9 100644 --- a/src/Enumerable.ts +++ b/src/Enumerable.ts @@ -1,4 +1,3 @@ import { Enumerable } from './internal/Enumerable'; export default Enumerable; - diff --git a/src/extensions/static/onErrorResumeNext.ts b/src/extensions/static/onErrorResumeNext.ts new file mode 100644 index 0000000..c2e859a --- /dev/null +++ b/src/extensions/static/onErrorResumeNext.ts @@ -0,0 +1,14 @@ +import onErrorResumeNextFn from '../../static/onErrorResumeNext'; +import { Enumerable } from '../../internal/Enumerable'; + +function onErrorResumeNext(...sources: Iterable[]): Enumerable { + return new Enumerable(onErrorResumeNextFn(...sources)); +} + +Enumerable.onErrorResumeNext = onErrorResumeNext; + +declare module '../../internal/Enumerable' { + namespace Enumerable { + export function onErrorResumeNext(...sources: Iterable[]): Enumerable; + } +} diff --git a/src/index.ts b/src/index.ts index 3b17c73..134847c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -53,6 +53,7 @@ import './extensions/static/concat'; import './extensions/static/defer'; import './extensions/static/generate'; import './extensions/static/if'; +import './extensions/static/onErrorResumeNext'; import './extensions/static/range'; import './extensions/static/repeat'; import './extensions/static/return'; diff --git a/src/onErrorResumeNext.ts b/src/onErrorResumeNext.ts index e7a100d..fd51cfe 100644 --- a/src/onErrorResumeNext.ts +++ b/src/onErrorResumeNext.ts @@ -3,5 +3,8 @@ export default function* onErrorResumeNext(this: Iterable, sec yield* this; } catch (error) { } - yield* second; + try { + yield* second; + } catch (error) { + } } diff --git a/src/static/onErrorResumeNext.ts b/src/static/onErrorResumeNext.ts new file mode 100644 index 0000000..6d176c1 --- /dev/null +++ b/src/static/onErrorResumeNext.ts @@ -0,0 +1,8 @@ +export default function* onErrorResumeNext(...sources: Iterable[]) { + for (const source of sources) { + try { + yield* source; + } catch (error) { + } + } +} diff --git a/test/onErrorResumeNextTest.ts b/test/onErrorResumeNextTest.ts index 7acb534..0745be4 100644 --- a/test/onErrorResumeNextTest.ts +++ b/test/onErrorResumeNextTest.ts @@ -10,7 +10,13 @@ describe('onErrorResumeNext()', () => { throw new Error() } }; - const ys = [3, 4]; + const ys = { + [Symbol.iterator]: function*() { + yield 3 + yield 4 + throw new Error() + } + }; assert.deepEqual(new Enumerable(xs).onErrorResumeNext(ys).toArray(), [1, 2, 3, 4]); }); }); diff --git a/test/static/onErrorResumeNext.ts b/test/static/onErrorResumeNext.ts new file mode 100644 index 0000000..31fe84f --- /dev/null +++ b/test/static/onErrorResumeNext.ts @@ -0,0 +1,23 @@ +import * as assert from 'assert'; +import Enumerable from '../../src/'; + +describe('onErrorResumeNext()', () => { + it('should creates a sequence that concatenates both given sequences', () => { + const xs = { + [Symbol.iterator]: function*() { + yield 1; + yield 2; + throw new Error(); + } + }; + const ys = { + [Symbol.iterator]: function*() { + yield 3; + yield 4; + throw new Error(); + } + }; + assert.deepEqual(Enumerable.onErrorResumeNext(xs, ys).toArray(), [1, 2, 3, 4]); + }); +}); +