Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(PromiseObservable): fromPromise does not accept PromiseLike object #2505

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
19 changes: 19 additions & 0 deletions spec/observables/from-promise-spec.ts
Expand Up @@ -72,6 +72,25 @@ describe('Observable.fromPromise', () => {
});
});

it('should accept PromiseLike object for interoperability', (done: MochaDone) => {
class CustomPromise<T> implements PromiseLike<T> {
constructor(private promise: PromiseLike<T>) {
}
then(onFulfilled?, onRejected?): PromiseLike<T> {
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)
Expand Down
6 changes: 3 additions & 3 deletions src/observable/PromiseObservable.ts
Expand Up @@ -31,19 +31,19 @@ export class PromiseObservable<T> extends Observable<T> {
* @see {@link bindCallback}
* @see {@link from}
*
* @param {Promise<T>} promise The promise to be converted.
* @param {PromiseLike<T>} 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<T>} An Observable which wraps the Promise.
* @static true
* @name fromPromise
* @owner Observable
*/
static create<T>(promise: Promise<T>, scheduler?: IScheduler): Observable<T> {
static create<T>(promise: PromiseLike<T>, scheduler?: IScheduler): Observable<T> {
return new PromiseObservable(promise, scheduler);
}

constructor(private promise: Promise<T>, private scheduler?: IScheduler) {
constructor(private promise: PromiseLike<T>, private scheduler?: IScheduler) {
super();
}

Expand Down