refactor(Observable): implement toPromise and fromPromise without side effects

BREAKING CHANGE:

toPromise is no longer an instance method of the `Observable` returned
by Angular, and fromPromise is no longer available as a static method.

The easiest way to account for this change in applications is to import
the auto-patching modules from rxjs, which will automatically add these
operators back to the Observable prototype.

```
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/observable/fromPromise';
```

Closes #5542
Closes #5626
This commit is contained in:
Jeff Cross 2015-12-04 09:09:57 -08:00
parent 1f35048d54
commit c39f4c3b38
7 changed files with 13 additions and 18 deletions

View File

@ -9,13 +9,11 @@ import {Observable as RxObservable} from 'rxjs/Observable';
import {Subscription} from 'rxjs/Subscription'; import {Subscription} from 'rxjs/Subscription';
import {Operator} from 'rxjs/Operator'; import {Operator} from 'rxjs/Operator';
import 'rxjs/observable/fromPromise'; import {PromiseObservable} from 'rxjs/observable/fromPromise';
import 'rxjs/operators/toPromise'; import {toPromise} from 'rxjs/operator/toPromise';
export {Subject} from 'rxjs/Subject'; export {Subject} from 'rxjs/Subject';
export namespace NodeJS { export namespace NodeJS {
export interface Timer {} export interface Timer {}
} }
@ -62,10 +60,10 @@ export class ObservableWrapper {
static callComplete(emitter: EventEmitter<any>) { emitter.complete(); } static callComplete(emitter: EventEmitter<any>) { emitter.complete(); }
static fromPromise(promise: Promise<any>): Observable<any> { static fromPromise(promise: Promise<any>): Observable<any> {
return RxObservable.fromPromise(promise); return PromiseObservable.create(promise);
} }
static toPromise(obj: Observable<any>): Promise<any> { return (<any>obj).toPromise(); } static toPromise(obj: Observable<any>): Promise<any> { return toPromise.call(obj); }
} }
/** /**

View File

@ -6,8 +6,8 @@ import {Connection, ConnectionBackend} from '../interfaces';
import {isPresent} from 'angular2/src/facade/lang'; import {isPresent} from 'angular2/src/facade/lang';
import {BaseException, WrappedException} from 'angular2/src/facade/exceptions'; import {BaseException, WrappedException} from 'angular2/src/facade/exceptions';
import {Subject} from 'rxjs/Subject'; import {Subject} from 'rxjs/Subject';
import {ReplaySubject} from 'rxjs/subjects/ReplaySubject'; import {ReplaySubject} from 'rxjs/subject/ReplaySubject';
import 'rxjs/operators/take'; import {take} from 'rxjs/operator/take';
/** /**
* *
@ -35,7 +35,7 @@ export class MockConnection implements Connection {
response: any; // Subject<Response> response: any; // Subject<Response>
constructor(req: Request) { constructor(req: Request) {
this.response = new ReplaySubject(1).take(1); this.response = take.call(new ReplaySubject(1), 1);
this.readyState = ReadyState.Open; this.readyState = ReadyState.Open;
this.request = req; this.request = req;
} }

View File

@ -690,11 +690,8 @@ var NG_ALL = [
'Observable:js', 'Observable:js',
'Observable#create():js', 'Observable#create():js',
'Observable.forEach():js', 'Observable.forEach():js',
'Observable#fromPromise():js',
'Observable.lift():js', 'Observable.lift():js',
'Observable.subscribe():js', 'Observable.subscribe():js',
'Observable.take():js',
'Observable.toPromise():js',
'OutputMetadata', 'OutputMetadata',
'OutputMetadata.bindingPropertyName', 'OutputMetadata.bindingPropertyName',

View File

@ -1,6 +1,6 @@
import {Component, View, NgFor} from 'angular2/angular2'; import {Component, View, NgFor} from 'angular2/angular2';
import {Http, Response} from 'angular2/http'; import {Http, Response} from 'angular2/http';
import 'rxjs/operators/map'; import 'rxjs/add/operator/map';
@Component({selector: 'http-app'}) @Component({selector: 'http-app'})
@View({ @View({

View File

@ -13182,7 +13182,7 @@
} }
}, },
"rxjs": { "rxjs": {
"version": "5.0.0-alpha.11" "version": "5.0.0-alpha.13"
}, },
"selenium-webdriver": { "selenium-webdriver": {
"version": "2.48.2", "version": "2.48.2",

6
npm-shrinkwrap.json generated
View File

@ -20207,9 +20207,9 @@
} }
}, },
"rxjs": { "rxjs": {
"version": "5.0.0-alpha.11", "version": "5.0.0-alpha.13",
"from": "rxjs@5.0.0-alpha.11", "from": "rxjs@5.0.0-alpha.13",
"resolved": "http://registry.npmjs.org/rxjs/-/rxjs-5.0.0-alpha.11.tgz" "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.0.0-alpha.13.tgz"
}, },
"selenium-webdriver": { "selenium-webdriver": {
"version": "2.48.2", "version": "2.48.2",

View File

@ -32,7 +32,7 @@
}, },
"dependencies": { "dependencies": {
"reflect-metadata": "0.1.2", "reflect-metadata": "0.1.2",
"rxjs": "5.0.0-alpha.11", "rxjs": "5.0.0-alpha.13",
"zone.js": "0.5.8" "zone.js": "0.5.8"
}, },
"devDependencies": { "devDependencies": {