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/Observer': 'Rx',
'rxjs/Subscription': 'Rx',
'rxjs/symbol/observable': 'Rx.Symbol.observable',
'rxjs/observable/merge': 'Rx.Observable',
'rxjs/operator/share': 'Rx.Observable.prototype'
}

View File

@ -7,7 +7,6 @@
*/
import {Observable} from 'rxjs/Observable';
import {$$observable as symbolObservable} from 'rxjs/symbol/observable';
/**
* 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
*/
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.

View File

@ -30,6 +30,9 @@ export function main() {
describe('isObservable', () => {
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',
() => expect(isObservable(undefined)).toEqual(false));
@ -40,8 +43,5 @@ export function main() {
it('should be false if the argument is a function',
() => expect(isObservable(() => {})).toEqual(false));
it('should be false if the argument is the object with subscribe function',
() => expect(isObservable({subscribe: () => {}})).toEqual(false));
});
}