Skip to content
This repository was archived by the owner on Apr 20, 2018. It is now read-only.

Commit efc6d6b

Browse files
Merge pull request #856 from xgrommx/patch-1
Update spawn.js
2 parents 41ff7f0 + 99b713a commit efc6d6b

1 file changed

Lines changed: 62 additions & 63 deletions

File tree

src/core/linq/observable/spawn.js

Lines changed: 62 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)