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.
79 lines
3.0 KiB
79 lines
3.0 KiB
"use strict"; |
|
var root_1 = require('./root'); |
|
var isArrayLike_1 = require('./isArrayLike'); |
|
var isPromise_1 = require('./isPromise'); |
|
var isObject_1 = require('./isObject'); |
|
var Observable_1 = require('../Observable'); |
|
var iterator_1 = require('../symbol/iterator'); |
|
var InnerSubscriber_1 = require('../InnerSubscriber'); |
|
var observable_1 = require('../symbol/observable'); |
|
function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) { |
|
var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex); |
|
if (destination.closed) { |
|
return null; |
|
} |
|
if (result instanceof Observable_1.Observable) { |
|
if (result._isScalar) { |
|
destination.next(result.value); |
|
destination.complete(); |
|
return null; |
|
} |
|
else { |
|
destination.syncErrorThrowable = true; |
|
return result.subscribe(destination); |
|
} |
|
} |
|
else if (isArrayLike_1.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_1.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_1.root.setTimeout(function () { throw err; }); |
|
}); |
|
return destination; |
|
} |
|
else if (result && typeof result[iterator_1.iterator] === 'function') { |
|
var iterator = result[iterator_1.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[observable_1.observable] === 'function') { |
|
var obs = result[observable_1.observable](); |
|
if (typeof obs.subscribe !== 'function') { |
|
destination.error(new TypeError('Provided object does not correctly implement Symbol.observable')); |
|
} |
|
else { |
|
return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex)); |
|
} |
|
} |
|
else { |
|
var value = isObject_1.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; |
|
} |
|
exports.subscribeToResult = subscribeToResult; |
|
//# sourceMappingURL=subscribeToResult.js.map
|