File tree Expand file tree Collapse file tree 4 files changed +34
-1
lines changed Expand file tree Collapse file tree 4 files changed +34
-1
lines changed Original file line number Diff line number Diff line change
1
+ /* globals describe, it, expect */
2
+ var Rx = require ( '../../dist/cjs/Rx' ) ;
3
+ var promise = require ( 'promise' ) ;
4
+ var Observable = Rx . Observable ;
5
+
6
+ describe ( 'Observable.prototype.toPromise()' , function ( ) {
7
+ it ( 'should convert an Observable to a promise of its last value' , function ( done ) {
8
+ Observable . of ( 1 , 2 , 3 ) . toPromise ( promise ) . then ( function ( x ) {
9
+ expect ( x ) . toBe ( 3 ) ;
10
+ done ( ) ;
11
+ } ) ;
12
+ } ) ;
13
+
14
+ it ( 'should handle errors properly' , function ( done ) {
15
+ Observable . throw ( 'bad' ) . toPromise ( promise ) . then ( function ( ) {
16
+ throw 'should not be called' ;
17
+ } , function ( err ) {
18
+ expect ( err ) . toBe ( 'bad' ) ;
19
+ done ( ) ;
20
+ } ) ;
21
+ } ) ;
22
+ } ) ;
Original file line number Diff line number Diff line change @@ -129,7 +129,8 @@ export default class Observable<T> {
129
129
take : ( count : number ) => Observable < T > ;
130
130
takeUntil : ( observable : Observable < any > ) => Observable < T > ;
131
131
partition : ( predicate : ( x : T ) => boolean ) => Observable < T > [ ] ;
132
-
132
+ toPromise : ( PromiseCtor : PromiseConstructor ) => Promise < T > ;
133
+
133
134
observeOn : ( scheduler : Scheduler , delay ?: number ) => Observable < T > ;
134
135
subscribeOn : ( scheduler : Scheduler , delay ?: number ) => Observable < T > ;
135
136
Original file line number Diff line number Diff line change @@ -122,8 +122,10 @@ observableProto.observeOn = observeOn;
122
122
observableProto . subscribeOn = subscribeOn ;
123
123
124
124
import partition from './operators/partition' ;
125
+ import toPromise from './operators/toPromise' ;
125
126
126
127
observableProto . partition = partition ;
128
+ observableProto . toPromise = toPromise ;
127
129
128
130
import _catch from './operators/catch' ;
129
131
import retryWhen from './operators/retryWhen' ;
Original file line number Diff line number Diff line change
1
+ import Subscriber from '../Subscriber' ;
2
+
3
+ export default function toPromise < T > ( PromiseCtor : PromiseConstructor = Promise ) : Promise < T > {
4
+ return new PromiseCtor ( ( resolve , reject ) => {
5
+ let value : any ;
6
+ this . subscribe ( x => value = x , err => reject ( err ) , ( ) => resolve ( value ) ) ;
7
+ } ) ;
8
+ }
You can’t perform that action at this time.
0 commit comments