You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
3.0 KiB
78 lines
3.0 KiB
/** PURE_IMPORTS_START ._root,._isArrayLike,._isPromise,._isObject,.._Observable,.._symbol_iterator,.._InnerSubscriber,.._symbol_observable PURE_IMPORTS_END */ |
|
import { root } from './root'; |
|
import { isArrayLike } from './isArrayLike'; |
|
import { isPromise } from './isPromise'; |
|
import { isObject } from './isObject'; |
|
import { Observable } from '../Observable'; |
|
import { iterator as Symbol_iterator } from '../symbol/iterator'; |
|
import { InnerSubscriber } from '../InnerSubscriber'; |
|
import { observable as Symbol_observable } from '../symbol/observable'; |
|
export function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) { |
|
var destination = new InnerSubscriber(outerSubscriber, outerValue, outerIndex); |
|
if (destination.closed) { |
|
return null; |
|
} |
|
if (result instanceof Observable) { |
|
if (result._isScalar) { |
|
destination.next(result.value); |
|
destination.complete(); |
|
return null; |
|
} |
|
else { |
|
destination.syncErrorThrowable = true; |
|
return result.subscribe(destination); |
|
} |
|
} |
|
else if (isArrayLike(result)) { |
|
for (var i = 0, len = result.length; i < len && !destination.closed; i++) { |
|
destination.next(result[i]); |
|
} |
|
if (!destination.closed) { |
|
destination.complete(); |
|
} |
|
} |
|
else if (isPromise(result)) { |
|
result.then(function (value) { |
|
if (!destination.closed) { |
|
destination.next(value); |
|
destination.complete(); |
|
} |
|
}, function (err) { return destination.error(err); }) |
|
.then(null, function (err) { |
|
// Escaping the Promise trap: globally throw unhandled errors |
|
root.setTimeout(function () { throw err; }); |
|
}); |
|
return destination; |
|
} |
|
else if (result && typeof result[Symbol_iterator] === 'function') { |
|
var iterator = result[Symbol_iterator](); |
|
do { |
|
var item = iterator.next(); |
|
if (item.done) { |
|
destination.complete(); |
|
break; |
|
} |
|
destination.next(item.value); |
|
if (destination.closed) { |
|
break; |
|
} |
|
} while (true); |
|
} |
|
else if (result && typeof result[Symbol_observable] === 'function') { |
|
var obs = result[Symbol_observable](); |
|
if (typeof obs.subscribe !== 'function') { |
|
destination.error(new TypeError('Provided object does not correctly implement Symbol.observable')); |
|
} |
|
else { |
|
return obs.subscribe(new InnerSubscriber(outerSubscriber, outerValue, outerIndex)); |
|
} |
|
} |
|
else { |
|
var value = isObject(result) ? 'an invalid object' : "'" + result + "'"; |
|
var msg = ("You provided " + value + " where a stream was expected.") |
|
+ ' You can provide an Observable, Promise, Array, or Iterable.'; |
|
destination.error(new TypeError(msg)); |
|
} |
|
return null; |
|
} |
|
//# sourceMappingURL=subscribeToResult.js.map
|
|
|