@@ -52,74 +52,73 @@ var spawn = Observable.spawn = function () {
5252 } ) ;
5353 }
5454
55- function toObservable ( obj ) {
56- if ( ! obj ) { return obj ; }
57- if ( Observable . isObservable ( obj ) ) { return obj ; }
58- if ( isPromise ( obj ) ) { return Observable . fromPromise ( obj ) ; }
59- if ( isGeneratorFunction ( obj ) || isGenerator ( obj ) ) { return spawn . call ( this , obj ) ; }
60- if ( isFunction ( obj ) ) { return thunkToObservable . call ( this , obj ) ; }
61- if ( isArrayLike ( obj ) || isIterable ( obj ) ) { return arrayToObservable . call ( this , obj ) ; }
62- if ( isObject ( obj ) ) return objectToObservable . call ( this , obj ) ;
63- return obj ;
64- }
65-
66- function arrayToObservable ( obj ) {
67- return Observable . from ( obj )
55+ function toObservable ( obj ) {
56+ if ( ! obj ) { return obj ; }
57+ if ( Observable . isObservable ( obj ) ) { return obj ; }
58+ if ( isPromise ( obj ) ) { return Observable . fromPromise ( obj ) ; }
59+ if ( isGeneratorFunction ( obj ) || isGenerator ( obj ) ) { return spawn . call ( this , obj ) ; }
60+ if ( isFunction ( obj ) ) { return thunkToObservable . call ( this , obj ) ; }
61+ if ( isArrayLike ( obj ) || isIterable ( obj ) ) { return arrayToObservable . call ( this , obj ) ; }
62+ if ( isObject ( obj ) ) { return objectToObservable . call ( this , obj ) ; }
63+ return obj ;
64+ }
65+
66+ function arrayToObservable ( obj ) {
67+ return Observable . from ( obj )
6868 . flatMap ( toObservable )
6969 . toArray ( ) ;
70- }
71-
72- function objectToObservable ( obj ) {
73- var results = new obj . constructor ( ) , keys = Object . keys ( obj ) , observables = [ ] ;
74- for ( var i = 0 , len = keys . length ; i < len ; i ++ ) {
75- var key = keys [ i ] , observable = toObservable . call ( this , obj [ key ] ) ;
76- if ( observable && Observable . isObservable ( observable ) ) {
77- defer ( observable , key ) ;
78- } else {
79- results [ key ] = obj [ key ] ;
80- }
81- }
82- return Observable . concat ( observables ) . startWith ( results ) ;
83-
84- function defer ( observable , key ) {
85- results [ key ] = undefined ;
86- observables . push ( new AnonymousObservable ( function ( o ) {
87- return observable . subscribe ( function ( next ) {
88- results [ key ] = next ;
89- o . onCompleted ( ) ;
90- } ) ;
91- } ) ) ;
70+ }
71+
72+ function objectToObservable ( obj ) {
73+ var results = new obj . constructor ( ) , keys = Object . keys ( obj ) , observables = [ ] ;
74+ for ( var i = 0 , len = keys . length ; i < len ; i ++ ) {
75+ var key = keys [ i ] ;
76+ var observable = toObservable . call ( this , obj [ key ] ) ;
77+
78+ if ( observable && Observable . isObservable ( observable ) ) {
79+ defer ( observable , key ) ;
80+ } else {
81+ results [ key ] = obj [ key ] ;
9282 }
9383 }
9484
95- function thunkToObservable ( fn ) {
96- var self = this ;
97- return new AnonymousObservable ( function ( o ) {
98- fn . call ( self , function ( ) {
99- var err = arguments [ 0 ] , res = arguments [ 1 ] ;
100- if ( err ) { return o . onError ( err ) ; }
101- if ( arguments . length > 2 ) {
102- var args = [ ] ;
103- for ( var i = 1 , len = arguments . length ; i < len ; i ++ ) { args . push ( arguments [ i ] ) ; }
104- res = args ;
105- }
106- o . onNext ( res ) ;
107- o . onCompleted ( ) ;
108- } ) ;
109- } ) ;
110- }
111-
112- function isGenerator ( obj ) {
113- return isFunction ( obj . next ) && isFunction ( obj . throw ) ;
114- }
85+ return Observable . forkJoin . apply ( Observable , observables ) . map ( function ( ) {
86+ return results ;
87+ } ) ;
11588
116- function isGeneratorFunction ( obj ) {
117- var ctor = obj . constructor ;
118- if ( ! ctor ) { return false ; }
119- if ( ctor . name === 'GeneratorFunction' || ctor . displayName === 'GeneratorFunction' ) { return true ; }
120- return isGenerator ( ctor . prototype ) ;
121- }
12289
123- function isObject ( val ) {
124- return Object == val . constructor ;
90+ function defer ( observable , key ) {
91+ results [ key ] = undefined ;
92+ observables . push ( observable . map ( function ( next ) {
93+ results [ key ] = next ;
94+ } ) ) ;
12595 }
96+ }
97+
98+ function thunkToObservable ( fn ) {
99+ var self = this ;
100+ return new AnonymousObservable ( function ( o ) {
101+ fn . call ( self , function ( ) {
102+ var err = arguments [ 0 ] , res = arguments [ 1 ] ;
103+ if ( err ) { return o . onError ( err ) ; }
104+ if ( arguments . length > 2 ) {
105+ var args = [ ] ;
106+ for ( var i = 1 , len = arguments . length ; i < len ; i ++ ) { args . push ( arguments [ i ] ) ; }
107+ res = args ;
108+ }
109+ o . onNext ( res ) ;
110+ o . onCompleted ( ) ;
111+ } ) ;
112+ } ) ;
113+ }
114+
115+ function isGenerator ( obj ) {
116+ return isFunction ( obj . next ) && isFunction ( obj . throw ) ;
117+ }
118+
119+ function isGeneratorFunction ( obj ) {
120+ var ctor = obj . constructor ;
121+ if ( ! ctor ) { return false ; }
122+ if ( ctor . name === 'GeneratorFunction' || ctor . displayName === 'GeneratorFunction' ) { return true ; }
123+ return isGenerator ( ctor . prototype ) ;
124+ }
0 commit comments