fix(core): use presence of .subscribe to detect observables rather then Symbol.observable (#15171)

Fixes #14298
Fixes #14473
Fixes #14926
This commit is contained in:
Dzmitry Shylovich 2017-03-16 03:13:03 +03:00 committed by Chuck Jazdzewski
parent 313158132d
commit 6e98757665
3 changed files with 5 additions and 6 deletions

View File

@ -16,7 +16,6 @@ export default {
'rxjs/Subject': 'Rx', 'rxjs/Subject': 'Rx',
'rxjs/Observer': 'Rx', 'rxjs/Observer': 'Rx',
'rxjs/Subscription': 'Rx', 'rxjs/Subscription': 'Rx',
'rxjs/symbol/observable': 'Rx.Symbol.observable',
'rxjs/observable/merge': 'Rx.Observable', 'rxjs/observable/merge': 'Rx.Observable',
'rxjs/operator/share': 'Rx.Observable.prototype' 'rxjs/operator/share': 'Rx.Observable.prototype'
} }

View File

@ -7,7 +7,6 @@
*/ */
import {Observable} from 'rxjs/Observable'; import {Observable} from 'rxjs/Observable';
import {$$observable as symbolObservable} from 'rxjs/symbol/observable';
/** /**
* Determine if the argument is shaped like a Promise * Determine if the argument is shaped like a Promise
@ -22,7 +21,8 @@ export function isPromise(obj: any): obj is Promise<any> {
* Determine if the argument is an Observable * Determine if the argument is an Observable
*/ */
export function isObservable(obj: any | Observable<any>): obj is Observable<any> { export function isObservable(obj: any | Observable<any>): obj is Observable<any> {
return !!(obj && obj[symbolObservable]); // TODO use Symbol.observable when https://github.com/ReactiveX/rxjs/issues/2415 will be resolved
return !!obj && typeof obj.subscribe === 'function';
} }
// TODO(misko): replace with Object.assign once we require ES6. // TODO(misko): replace with Object.assign once we require ES6.

View File

@ -30,6 +30,9 @@ export function main() {
describe('isObservable', () => { describe('isObservable', () => {
it('should be true for an Observable', () => expect(isObservable(of (true))).toEqual(true)); it('should be true for an Observable', () => expect(isObservable(of (true))).toEqual(true));
it('should be true if the argument is the object with subscribe function',
() => expect(isObservable({subscribe: () => {}})).toEqual(true));
it('should be false if the argument is undefined', it('should be false if the argument is undefined',
() => expect(isObservable(undefined)).toEqual(false)); () => expect(isObservable(undefined)).toEqual(false));
@ -40,8 +43,5 @@ export function main() {
it('should be false if the argument is a function', it('should be false if the argument is a function',
() => expect(isObservable(() => {})).toEqual(false)); () => expect(isObservable(() => {})).toEqual(false));
it('should be false if the argument is the object with subscribe function',
() => expect(isObservable({subscribe: () => {}})).toEqual(false));
}); });
} }