From c250afc6f854220853dbe773da636ce1fd9a3070 Mon Sep 17 00:00:00 2001 From: OJ Kwon Date: Wed, 14 Jun 2017 10:54:05 -0700 Subject: [PATCH] fix(Observable): errors thrown in observer/handlers without an operator applied will no longer be swallowed (#2626) - closes #2565 --- spec/Observable-spec.ts | 12 ++++++++++++ src/Observable.ts | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/spec/Observable-spec.ts b/spec/Observable-spec.ts index 5e8f2c5d61..9ce73c4f63 100644 --- a/spec/Observable-spec.ts +++ b/spec/Observable-spec.ts @@ -46,6 +46,18 @@ describe('Observable', () => { }); }); + it('should not send error to error handler for observable have source', () => { + const source = Observable.of(1); + const observable = new Observable(); + (observable as any).source = source; + + expect(() => { + observable.subscribe((x) => { + throw new Error('error'); + }); + }).to.throw(); + }); + describe('forEach', () => { it('should iterate and return a Promise', (done: MochaDone) => { const expected = [1, 2, 3]; diff --git a/src/Observable.ts b/src/Observable.ts index 2449a61337..c5be1388ab 100644 --- a/src/Observable.ts +++ b/src/Observable.ts @@ -198,7 +198,7 @@ export class Observable implements Subscribable { if (operator) { operator.call(sink, this.source); } else { - sink.add(this._trySubscribe(sink)); + sink.add(this.source ? this._subscribe(sink) : this._trySubscribe(sink)); } if (sink.syncErrorThrowable) {