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:
parent
313158132d
commit
6e98757665
@ -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'
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
@ -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));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user