From f19ed90c3583691bf80831a2ed6f96ab9a00035e Mon Sep 17 00:00:00 2001 From: Alex Okrushko Date: Mon, 15 Aug 2022 15:23:35 -0400 Subject: [PATCH] feat(component-store): handle errors in next callback --- modules/component-store/spec/tap-response.spec.ts | 13 +++++++++++++ modules/component-store/src/tap-response.ts | 6 ++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/modules/component-store/spec/tap-response.spec.ts b/modules/component-store/spec/tap-response.spec.ts index db501cec7b..f9e5d791e0 100644 --- a/modules/component-store/spec/tap-response.spec.ts +++ b/modules/component-store/spec/tap-response.spec.ts @@ -22,6 +22,19 @@ describe('tapResponse', () => { expect(errorCallback).toHaveBeenCalledWith(error); }); + it('should invoke error callback on the exception thrown in next', () => { + const errorCallback = jest.fn(); + const error = { message: 'error' }; + + function producesError() { + throw error; + } + + of(1).pipe(tapResponse(producesError, errorCallback)).subscribe(); + + expect(errorCallback).toHaveBeenCalledWith(error); + }); + it('should invoke complete callback on complete', () => { const completeCallback = jest.fn(); diff --git a/modules/component-store/src/tap-response.ts b/modules/component-store/src/tap-response.ts index 9b5ed029e8..8ceb33421a 100644 --- a/modules/component-store/src/tap-response.ts +++ b/modules/component-store/src/tap-response.ts @@ -31,9 +31,11 @@ export function tapResponse( source.pipe( tap({ next: nextFn, - error: errorFn, complete: completeFn, }), - catchError(() => EMPTY) + catchError((e) => { + errorFn(e); + return EMPTY; + }) ); }