From 5cb0f2ba50e81de29e9f4dde339e659436b39b23 Mon Sep 17 00:00:00 2001 From: Nikhil Tilwalli Date: Wed, 2 Dec 2015 13:11:51 -0500 Subject: [PATCH] fix(Observable): Subjects no longer wrapped in Subscriber Observable.subscribe updated to check for instanceof Subject, test added, import order of Subject changed (moved to top) in Rx and KitchenSink to avoid circular dependency issue. closes #825, closes #748 --- spec/observable-spec.js | 9 ++++++++- src/Observable.ts | 2 +- src/Rx.KitchenSink.ts | 4 +++- src/Rx.ts | 7 ++++++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/spec/observable-spec.js b/spec/observable-spec.js index 2650f6724a..03aea9bb1a 100644 --- a/spec/observable-spec.js +++ b/spec/observable-spec.js @@ -109,6 +109,13 @@ describe('Observable', function () { expect(unsubscribeCalled).toBe(true); }); + it('should return the given subject when called with a Subject', function () { + var source = Observable.of(42) + var subject = new Rx.Subject() + var subscriber = source.subscribe(subject) + expect(subscriber).toBe(subject) + }) + describe('when called with an anonymous observer', function () { it('should accept an anonymous observer with just a next function', function () { Observable.of(1).subscribe({ @@ -161,4 +168,4 @@ describe('Observable.create', function () { result.subscribe(function () { }); expect(called).toBe(true); }); -}); \ No newline at end of file +}); diff --git a/src/Observable.ts b/src/Observable.ts index ce4949b860..0d4742fcf2 100644 --- a/src/Observable.ts +++ b/src/Observable.ts @@ -89,7 +89,7 @@ export class Observable implements CoreOperators { let subscriber: Subscriber; if (observerOrNext && typeof observerOrNext === 'object') { - if (observerOrNext instanceof Subscriber) { + if (observerOrNext instanceof Subscriber || observerOrNext instanceof Subject) { subscriber = (> observerOrNext); } else { subscriber = new Subscriber(> observerOrNext); diff --git a/src/Rx.KitchenSink.ts b/src/Rx.KitchenSink.ts index 65b50cfc08..8aa52abc08 100644 --- a/src/Rx.KitchenSink.ts +++ b/src/Rx.KitchenSink.ts @@ -1,3 +1,6 @@ +/* tslint:disable:no-unused-variable */ +import {Subject} from './Subject'; +/* tslint:enable:no-unused-variable */ import {Observable} from './Observable'; import {CoreOperators} from './CoreOperators'; import {Scheduler as IScheduler} from './Scheduler'; @@ -125,7 +128,6 @@ import './operator/zip'; import './operator/zipAll'; /* tslint:disable:no-unused-variable */ -import {Subject} from './Subject'; import {Subscription} from './Subscription'; import {Subscriber} from './Subscriber'; import {AsyncSubject} from './subject/AsyncSubject'; diff --git a/src/Rx.ts b/src/Rx.ts index 58d03f4474..fbf701421d 100644 --- a/src/Rx.ts +++ b/src/Rx.ts @@ -1,3 +1,9 @@ +/* tslint:disable:no-unused-variable */ +// Subject imported before Observable to bypass circular dependency issue since +// Subject extends Observable and Observable references Subject in it's +// definition +import {Subject} from './Subject'; +/* tslint:enable:no-unused-variable */ import {Observable} from './Observable'; // statics @@ -101,7 +107,6 @@ import './operator/zip'; import './operator/zipAll'; /* tslint:disable:no-unused-variable */ -import {Subject} from './Subject'; import {Subscription} from './Subscription'; import {Subscriber} from './Subscriber'; import {AsyncSubject} from './subject/AsyncSubject';