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';