From 58b8ebc6758338317af337a3b3a9b02d8f09f7fc Mon Sep 17 00:00:00 2001 From: Ben Lesh Date: Sat, 24 Mar 2018 11:59:34 -0700 Subject: [PATCH] fix(Observable): empty ctor returns valid Observable (#3464) Before if you subscribed such as `(new Observable()).subscribe()` it would throw an error, this remedies that and will effectively return a never observable, however _not_ the same instance as `NEVER` --- spec/Observable-spec.ts | 5 +++++ src/internal/Observable.ts | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/spec/Observable-spec.ts b/spec/Observable-spec.ts index c13c876243..e1f83525bd 100644 --- a/spec/Observable-spec.ts +++ b/spec/Observable-spec.ts @@ -50,6 +50,11 @@ describe('Observable', () => { }); }); + it('should allow empty ctor, which is effectively a never-observable', () => { + const result = new Observable(); + expectObservable(result).toBe('-'); + }); + describe('forEach', () => { it('should iterate and return a Promise', (done) => { const expected = [1, 2, 3]; diff --git a/src/internal/Observable.ts b/src/internal/Observable.ts index 1ff29df883..fa18e841c1 100644 --- a/src/internal/Observable.ts +++ b/src/internal/Observable.ts @@ -20,9 +20,8 @@ export class Observable implements Subscribable { /** @internal */ public _isScalar: boolean = false; - /** @internal */ protected source: Observable; - /** @internal */ + protected operator: Operator; /** @@ -248,7 +247,8 @@ export class Observable implements Subscribable { /** @internal */ protected _subscribe(subscriber: Subscriber): TeardownLogic { - return this.source.subscribe(subscriber); + const { source } = this; + return source && source.subscribe(subscriber); } // TODO(benlesh): determine if this is still necessary