diff --git a/spec/observables/from-promise-spec.ts b/spec/observables/from-promise-spec.ts index 49e64c7d94..3fca23353c 100644 --- a/spec/observables/from-promise-spec.ts +++ b/spec/observables/from-promise-spec.ts @@ -72,6 +72,25 @@ describe('Observable.fromPromise', () => { }); }); + it('should accept PromiseLike object for interoperability', (done: MochaDone) => { + class CustomPromise implements PromiseLike { + constructor(private promise: PromiseLike) { + } + then(onFulfilled?, onRejected?): PromiseLike { + return new CustomPromise(this.promise.then(onFulfilled, onRejected)); + }; + } + const promise = new CustomPromise(Promise.resolve(42)); + Observable.fromPromise(promise) + .subscribe( + (x: number) => { expect(x).to.equal(42); }, + () => { + done(new Error('should not be called')); + }, () => { + done(); + }); + }); + it('should emit a value from a resolved promise on a separate scheduler', (done: MochaDone) => { const promise = Promise.resolve(42); Observable.fromPromise(promise, Rx.Scheduler.asap) diff --git a/src/observable/PromiseObservable.ts b/src/observable/PromiseObservable.ts index 6550430a3a..c0822667e9 100644 --- a/src/observable/PromiseObservable.ts +++ b/src/observable/PromiseObservable.ts @@ -31,7 +31,7 @@ export class PromiseObservable extends Observable { * @see {@link bindCallback} * @see {@link from} * - * @param {Promise} promise The promise to be converted. + * @param {PromiseLike} promise The promise to be converted. * @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling * the delivery of the resolved value (or the rejection). * @return {Observable} An Observable which wraps the Promise. @@ -39,11 +39,11 @@ export class PromiseObservable extends Observable { * @name fromPromise * @owner Observable */ - static create(promise: Promise, scheduler?: IScheduler): Observable { + static create(promise: PromiseLike, scheduler?: IScheduler): Observable { return new PromiseObservable(promise, scheduler); } - constructor(private promise: Promise, private scheduler?: IScheduler) { + constructor(private promise: PromiseLike, private scheduler?: IScheduler) { super(); }