"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var root_1 = require('../util/root'); var Observable_1 = require('../Observable'); var PromiseObservable = (function (_super) { __extends(PromiseObservable, _super); function PromiseObservable(promise, scheduler) { if (scheduler === void 0) { scheduler = null; } _super.call(this); this.promise = promise; this.scheduler = scheduler; } PromiseObservable.create = function (promise, scheduler) { if (scheduler === void 0) { scheduler = null; } return new PromiseObservable(promise, scheduler); }; PromiseObservable.prototype._subscribe = function (subscriber) { var _this = this; var promise = this.promise; var scheduler = this.scheduler; if (scheduler == null) { if (this._isScalar) { if (!subscriber.isUnsubscribed) { subscriber.next(this.value); subscriber.complete(); } } else { promise.then(function (value) { _this.value = value; _this._isScalar = true; if (!subscriber.isUnsubscribed) { subscriber.next(value); subscriber.complete(); } }, function (err) { if (!subscriber.isUnsubscribed) { subscriber.error(err); } }) .then(null, function (err) { // escape the promise trap, throw unhandled errors root_1.root.setTimeout(function () { throw err; }); }); } } else { if (this._isScalar) { if (!subscriber.isUnsubscribed) { return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber: subscriber }); } } else { promise.then(function (value) { _this.value = value; _this._isScalar = true; if (!subscriber.isUnsubscribed) { subscriber.add(scheduler.schedule(dispatchNext, 0, { value: value, subscriber: subscriber })); } }, function (err) { if (!subscriber.isUnsubscribed) { subscriber.add(scheduler.schedule(dispatchError, 0, { err: err, subscriber: subscriber })); } }) .then(null, function (err) { // escape the promise trap, throw unhandled errors root_1.root.setTimeout(function () { throw err; }); }); } } }; return PromiseObservable; }(Observable_1.Observable)); exports.PromiseObservable = PromiseObservable; function dispatchNext(_a) { var value = _a.value, subscriber = _a.subscriber; if (!subscriber.isUnsubscribed) { subscriber.next(value); subscriber.complete(); } } function dispatchError(_a) { var err = _a.err, subscriber = _a.subscriber; if (!subscriber.isUnsubscribed) { subscriber.error(err); } } //# sourceMappingURL=PromiseObservable.js.map